starting active tests
This commit is contained in:
parent
ec1b4fb0fa
commit
3b7e9da9cb
5 changed files with 81 additions and 58 deletions
22
.vstags
22
.vstags
|
@ -9857,8 +9857,6 @@ OpenAIAsync .build/Xz72xzB4iA/blib/lib/OpenAIAsync.pm 1;" p
|
|||
OpenAIAsync .build/Xz72xzB4iA/lib/OpenAIAsync.pm 1;" p
|
||||
OpenAIAsync .build/bgXXjrPaza/blib/lib/OpenAIAsync.pm 1;" p
|
||||
OpenAIAsync .build/bgXXjrPaza/lib/OpenAIAsync.pm 1;" p
|
||||
OpenAIAsync .build/latest/blib/lib/OpenAIAsync.pm 1;" p
|
||||
OpenAIAsync .build/latest/lib/OpenAIAsync.pm 1;" p
|
||||
OpenAIAsync .build/mKmyAW37h1/blib/lib/OpenAIAsync.pm 1;" p
|
||||
OpenAIAsync .build/mKmyAW37h1/lib/OpenAIAsync.pm 1;" p
|
||||
OpenAIAsync .build/previous/blib/lib/OpenAIAsync.pm 1;" p
|
||||
|
@ -9874,8 +9872,6 @@ OpenAIAsync::Client .build/Xz72xzB4iA/blib/lib/OpenAIAsync/Client.pm 1;" p
|
|||
OpenAIAsync::Client .build/Xz72xzB4iA/lib/OpenAIAsync/Client.pm 1;" p
|
||||
OpenAIAsync::Client .build/bgXXjrPaza/blib/lib/OpenAIAsync/Client.pm 1;" p
|
||||
OpenAIAsync::Client .build/bgXXjrPaza/lib/OpenAIAsync/Client.pm 1;" p
|
||||
OpenAIAsync::Client .build/latest/blib/lib/OpenAIAsync/Client.pm 1;" p
|
||||
OpenAIAsync::Client .build/latest/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/previous/blib/lib/OpenAIAsync/Client.pm 1;" p
|
||||
|
@ -9891,8 +9887,6 @@ OpenAIAsync::Types .build/Xz72xzB4iA/blib/lib/OpenAIAsync/Types.pm 1;" p
|
|||
OpenAIAsync::Types .build/Xz72xzB4iA/lib/OpenAIAsync/Types.pm 1;" p
|
||||
OpenAIAsync::Types .build/bgXXjrPaza/blib/lib/OpenAIAsync/Types.pm 1;" p
|
||||
OpenAIAsync::Types .build/bgXXjrPaza/lib/OpenAIAsync/Types.pm 1;" p
|
||||
OpenAIAsync::Types .build/latest/blib/lib/OpenAIAsync/Types.pm 1;" p
|
||||
OpenAIAsync::Types .build/latest/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/previous/blib/lib/OpenAIAsync/Types.pm 1;" p
|
||||
|
@ -9918,8 +9912,6 @@ OpenAIAsync::Types::Requests .build/bgXXjrPaza/blib/lib/OpenAIAsync/Types/Reques
|
|||
OpenAIAsync::Types::Requests .build/bgXXjrPaza/lib/OpenAIAsync/Types/Requests.pm 1;" p
|
||||
OpenAIAsync::Types::Requests .build/cD5KaBDsj2/blib/lib/OpenAIAsync/Types/Requests.pm 1;" p
|
||||
OpenAIAsync::Types::Requests .build/cD5KaBDsj2/lib/OpenAIAsync/Types/Requests.pm 1;" p
|
||||
OpenAIAsync::Types::Requests .build/latest/blib/lib/OpenAIAsync/Types/Requests.pm 1;" p
|
||||
OpenAIAsync::Types::Requests .build/latest/lib/OpenAIAsync/Types/Requests.pm 1;" p
|
||||
OpenAIAsync::Types::Requests .build/mKmyAW37h1/blib/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
|
||||
|
@ -9949,8 +9941,6 @@ OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/bgXXjrPaza/
|
|||
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/bgXXjrPaza/lib/OpenAIAsync/Types/Requests.pm 170;" p
|
||||
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/cD5KaBDsj2/blib/lib/OpenAIAsync/Types/Requests.pm 170;" p
|
||||
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/cD5KaBDsj2/lib/OpenAIAsync/Types/Requests.pm 170;" p
|
||||
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/latest/blib/lib/OpenAIAsync/Types/Requests.pm 170;" p
|
||||
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/latest/lib/OpenAIAsync/Types/Requests.pm 170;" p
|
||||
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/mKmyAW37h1/blib/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
|
||||
|
@ -9979,8 +9969,6 @@ OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .buil
|
|||
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/bgXXjrPaza/lib/OpenAIAsync/Types/Requests.pm 94;" p
|
||||
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/cD5KaBDsj2/blib/lib/OpenAIAsync/Types/Requests.pm 94;" p
|
||||
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/cD5KaBDsj2/lib/OpenAIAsync/Types/Requests.pm 94;" p
|
||||
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/latest/blib/lib/OpenAIAsync/Types/Requests.pm 94;" p
|
||||
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/latest/lib/OpenAIAsync/Types/Requests.pm 94;" p
|
||||
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/mKmyAW37h1/blib/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
|
||||
|
@ -10009,8 +9997,6 @@ OpenAIAsync::Types::Results .build/bgXXjrPaza/blib/lib/OpenAIAsync/Types/Results
|
|||
OpenAIAsync::Types::Results .build/bgXXjrPaza/lib/OpenAIAsync/Types/Results.pm 1;" p
|
||||
OpenAIAsync::Types::Results .build/cD5KaBDsj2/blib/lib/OpenAIAsync/Types/Results.pm 1;" p
|
||||
OpenAIAsync::Types::Results .build/cD5KaBDsj2/lib/OpenAIAsync/Types/Results.pm 1;" p
|
||||
OpenAIAsync::Types::Results .build/latest/blib/lib/OpenAIAsync/Types/Results.pm 1;" p
|
||||
OpenAIAsync::Types::Results .build/latest/lib/OpenAIAsync/Types/Results.pm 1;" p
|
||||
OpenAIAsync::Types::Results .build/mKmyAW37h1/blib/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
|
||||
|
@ -28096,10 +28082,6 @@ new .build/cD5KaBDsj2/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
|
|||
new .build/cD5KaBDsj2/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
|
||||
new .build/cD5KaBDsj2/lib/OpenAIAsync/Types/Requests.pm 173;" s
|
||||
new .build/cD5KaBDsj2/lib/OpenAIAsync/Types/Requests.pm 97;" s
|
||||
new .build/latest/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
|
||||
new .build/latest/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
|
||||
new .build/latest/lib/OpenAIAsync/Types/Requests.pm 173;" s
|
||||
new .build/latest/lib/OpenAIAsync/Types/Requests.pm 97;" s
|
||||
new .build/mKmyAW37h1/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
|
||||
new .build/mKmyAW37h1/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
|
||||
new .build/mKmyAW37h1/lib/OpenAIAsync/Types/Requests.pm 173;" s
|
||||
|
@ -28927,8 +28909,6 @@ ontent::new .build/bgXXjrPaza/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
|
|||
ontent::new .build/bgXXjrPaza/lib/OpenAIAsync/Types/Requests.pm 173;" s
|
||||
ontent::new .build/cD5KaBDsj2/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
|
||||
ontent::new .build/cD5KaBDsj2/lib/OpenAIAsync/Types/Requests.pm 173;" s
|
||||
ontent::new .build/latest/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
|
||||
ontent::new .build/latest/lib/OpenAIAsync/Types/Requests.pm 173;" s
|
||||
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/nb3podVIwj/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
|
||||
|
@ -31594,8 +31574,6 @@ y::new .build/bgXXjrPaza/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
|
|||
y::new .build/bgXXjrPaza/lib/OpenAIAsync/Types/Requests.pm 97;" s
|
||||
y::new .build/cD5KaBDsj2/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
|
||||
y::new .build/cD5KaBDsj2/lib/OpenAIAsync/Types/Requests.pm 97;" s
|
||||
y::new .build/latest/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
|
||||
y::new .build/latest/lib/OpenAIAsync/Types/Requests.pm 97;" s
|
||||
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/nb3podVIwj/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
|
||||
|
|
1
lib/OpenAIAsync/OobaBooga/README.md
Normal file
1
lib/OpenAIAsync/OobaBooga/README.md
Normal file
|
@ -0,0 +1 @@
|
|||
This is going to be a subclass of the client that adds in some additional options that are present only in their version of the OpenAI api
|
|
@ -8,69 +8,70 @@ use Object::PadX::Role::AutoJSON;
|
|||
use Object::Pad::ClassAttr::Struct;
|
||||
|
||||
class OpenAIAsync::Types::Results::ToolCall :does(OpenAIAsync::Types::Base) {
|
||||
field $id;
|
||||
field $type; # always "function" right now, may get expanded in the future
|
||||
field $id :JSONStr;
|
||||
field $type :JSONStr; # always "function" right now, may get expanded in the future
|
||||
field $function :MarshalTo(OpenAIAsync::Types::Results::FunctionCall);
|
||||
}
|
||||
|
||||
class OpenAIAsync::Types::Results::FunctionCall :does(OpenAIAsync::Types::Base) {
|
||||
field $arguments; # TODO decode the json from this directly?
|
||||
field $name;
|
||||
field $arguments :JSONStr; # TODO decode the json from this directly?
|
||||
field $name :JSONStr;
|
||||
}
|
||||
|
||||
class OpenAIAsync::Types::Results::ChatMessage :does(OpenAIAsync::Types::Base) {
|
||||
field $content;
|
||||
field $content :JSONStr;
|
||||
field $tool_calls :MarshalTo([OpenAIAsync::Types::Results::ToolCall]) = undef; # don't think my local server provides this
|
||||
field $role;
|
||||
field $role :JSONStr;
|
||||
field $function_call :MarshalTo(OpenAIAsync::Types::Results::FunctionCall) = undef; # Depcrecated, might still happen
|
||||
}
|
||||
|
||||
class OpenAIAsync::Types::Results::ChatCompletionChoices :does(OpenAIAsync::Types::Base) {
|
||||
field $finish_reason;
|
||||
field $index;
|
||||
field $finish_reason :JSONStr;
|
||||
field $index :JSONNum;
|
||||
field $message :MarshalTo(OpenAIAsync::Types::Results::ChatMessage);
|
||||
}
|
||||
|
||||
class OpenAIAsync::Types::Results::ChatCompletion :does(OpenAIAsync::Types::Base) {
|
||||
field $id;
|
||||
field $id :JSONStr;
|
||||
field $choices :MarshalTo([OpenAIAsync::Types::Results::ChatCompletionChoices]);
|
||||
field $created;
|
||||
field $model;
|
||||
field $system_fingerprint = undef; # My local system doesn't provide this
|
||||
field $created :JSONStr;
|
||||
field $model :JSONStr;
|
||||
field $system_fingerprint :JSONStr = undef; # My local system doesn't provide this
|
||||
field $usage :MarshalTo(OpenAIAsync::Types::Results::Usage);
|
||||
field $object;
|
||||
field $object :JSONStr;
|
||||
}
|
||||
|
||||
class OpenAIAsync::Types::Results::ChunkDelta :does(OpenAIAsync::Types::Base) {
|
||||
field $content;
|
||||
field $content :JSONStr;
|
||||
field $function_call :MarshalTo(OpenAIAsync::Types::Results::FunctionCall);
|
||||
field $tool_cass :MarshalTo([OpenAIAsync::Types::Results::ToolCall]);
|
||||
field $role;
|
||||
field $role :JSONStr;
|
||||
}
|
||||
|
||||
class OpenAIAsync::Types::Results::ChatCompletionChunkChoices :does(OpenAIAsync::Types::Base) {
|
||||
field $delta :MarshalTo(OpenAIAsync::Types::Results::ChunkDelta);
|
||||
field $finish_reason;
|
||||
field $index;
|
||||
field $finish_reason :JSONStr;
|
||||
field $index :JSONStr;
|
||||
}
|
||||
|
||||
# This is part of the streaming API
|
||||
class OpenAIAsync::Types::Results::ChatCompletionChunk :does(OpenAIAsync::Types::Base) {
|
||||
field $id;
|
||||
field $id :JSONStr;
|
||||
field $choices :MarshalTo(OpenAIAsync::Types::Results::ChatCompletionChunkChoices);
|
||||
field $created;
|
||||
field $model;
|
||||
field $system_fingerprint = undef;
|
||||
field $object;
|
||||
field $created :JSONStr;
|
||||
field $model :JSONStr;
|
||||
field $system_fingerprint :JSONStr = undef;
|
||||
field $object :JSONStr;
|
||||
}
|
||||
|
||||
class OpenAIAsync::Types::Results::Usage :does(OpenAIAsync::Types::Base) {
|
||||
field $total_tokens;
|
||||
field $prompt_tokens;
|
||||
field $completion_tokens; # look at chat completions, is this the same
|
||||
field $total_tokens :JSONNum;
|
||||
field $prompt_tokens :JSONNum;
|
||||
field $completion_tokens :JSONNum; # look at chat completions, is this the same
|
||||
}
|
||||
|
||||
class OpenAIAsync::Types::Results::LogProbs :does(OpenAIAsync::Types::Base) {
|
||||
# TODO what's the representation here?
|
||||
field $text_offset = undef;
|
||||
field $token_logprobs = undef;
|
||||
field $tokens = undef;
|
||||
|
@ -78,24 +79,24 @@ class OpenAIAsync::Types::Results::LogProbs :does(OpenAIAsync::Types::Base) {
|
|||
}
|
||||
|
||||
class OpenAIAsync::Types::Results::CompletionChoices :does(OpenAIAsync::Types::Base) {
|
||||
field $text;
|
||||
field $index;
|
||||
field $text :JSONStr;
|
||||
field $index :JSONNum;
|
||||
field $logprobs :MarshalTo(OpenAIAsync::Types::Results::LogProbs) = undef; # TODO make nicer type?
|
||||
field $finish_reason = 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) {
|
||||
field $id;
|
||||
field $id :JSONStr;
|
||||
field $choices :MarshalTo([OpenAIAsync::Types::Results::CompletionChoices]);
|
||||
field $created;
|
||||
field $model;
|
||||
field $created :JSONStr;
|
||||
field $model :JSONStr;
|
||||
field $system_fingerprint = undef; # my local implementation doesn't provide this, openai does it for tracking changes somehow
|
||||
field $usage :MarshalTo(OpenAIAsync::Types::Results::Usage);
|
||||
field $object;
|
||||
field $object :JSONStr;
|
||||
}
|
||||
|
||||
class OpenAIAsync::Types::Results::Embedding :does(OpenAIAsync::Types::Base) {
|
||||
field $index;
|
||||
field $embedding;
|
||||
field $object;
|
||||
field $index :JSONNum;
|
||||
field $embedding :JSONList(JSONNum);
|
||||
field $object :JSONStr;
|
||||
}
|
43
xt/02-create-client.t
Normal file
43
xt/02-create-client.t
Normal file
|
@ -0,0 +1,43 @@
|
|||
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();
|
Loading…
Add table
Reference in a new issue