diff --git a/lib/OpenAIAsync/Server.pm b/lib/OpenAIAsync/Server.pm index 84225d8..e6b35c2 100644 --- a/lib/OpenAIAsync/Server.pm +++ b/lib/OpenAIAsync/Server.pm @@ -222,6 +222,9 @@ class OpenAIAsync::Server :repr(HASH) :strict(params) { use HTTP::Response; use HTTP::Request; + use OpenAIAsync::Types::Requests; + use OpenAIAsync::Types::Results; + field $_json = JSON::MaybeXS->new(utf8 => 1, convert_blessed => 1); field $http_server; @@ -280,7 +283,7 @@ class OpenAIAsync::Server :repr(HASH) :strict(params) { method register_url(%opts) { # TODO check params - use Data::Dumper; + #use Data::Dumper; #say Dumper("Got url registered", \%opts); push $routes->@*, \%opts; } @@ -288,7 +291,6 @@ class OpenAIAsync::Server :repr(HASH) :strict(params) { async method _route_request($req, $ctx) { my $method = $req->method(); my $path = $req->path; - say "Got request ", $method, " => ", $path; try { @@ -303,20 +305,20 @@ class OpenAIAsync::Server :repr(HASH) :strict(params) { my $obj; if ($route->{decoder} eq "www-form-urlencoded") { - my %data = WWW::Form::UrlEncoded::parse_urlencoded($req->decoded_content); + my %data = WWW::Form::UrlEncoded::parse_urlencoded($req->body); $obj = $route->{request_class}->new(%data); } elsif ($route->{decoder} eq "json") { - my $data = $_json->decode($req->decoded_content); + my $data = $_json->decode($req->body); $obj = $route->{request_class}->new(%$data); } elsif ($route->{decoder} eq "null") { $obj = $route->{request_class}->new(); } else { # Try to detect based on content-type, then fail my $content_type = $req->header("Content-Type"); if ($content_type eq 'application/json') { - my $data = $_json->decode($req->decoded_content); + my $data = $_json->decode($req->body); $obj = $route->{request_class}->new(%$data); } elsif ($content_type eq 'application/x-www-form-urlencoded') { - my %data = WWW::Form::UrlEncoded::parse_urlencoded($req->decoded_content); + my %data = WWW::Form::UrlEncoded::parse_urlencoded($req->body); $obj = $route->{request_class}->new(%data); } else { die "Unsupported content-type for URI: $content_type"; @@ -324,11 +326,12 @@ class OpenAIAsync::Server :repr(HASH) :strict(params) { } try { - my ($result, @extra) = (await $route->{handle}->($req, $ctx, $obj, $params))->get(); + my ($result, @extra) = (await $route->{handle}->($req, $ctx, $obj, $params)); if ($route->{result_class}) { my $out_obj = $result; - unless ($out_obj isa $route->{result_object}) { + + unless ($out_obj isa $route->{result_class}) { $out_obj = $route->{result_class}->new(%$result); } diff --git a/lib/OpenAIAsync/Server/API/v1/ChatCompletion.pm b/lib/OpenAIAsync/Server/API/v1/ChatCompletion.pm index 8d4a2a1..b77dbae 100644 --- a/lib/OpenAIAsync/Server/API/v1/ChatCompletion.pm +++ b/lib/OpenAIAsync/Server/API/v1/ChatCompletion.pm @@ -33,9 +33,9 @@ role OpenAIAsync::Server::API::v1::ChatCompletion :strict(params) { method => 'POST', url => qr{^/v1/chat/completions$}, handle => async sub($req, $ctx, $obj, $params) {await $self->chat($obj, $req, $ctx)}, - request_class => "OpenAIAsync::Type::Request::ChatCompletion", - result_class => "OpenAIAsync::Type::Result::ChatCompletion", - decoder => 'www-form-urlencoded', # default is json, we need this for this api + request_class => "OpenAIAsync::Types::Requests::ChatCompletion", + result_class => "OpenAIAsync::Types::Results::ChatCompletion", + decoder => 'json', # default is json, we need this for this api ); } diff --git a/t/03-create-server.t b/t/03-create-server.t index e320763..c9636f1 100644 --- a/t/03-create-server.t +++ b/t/03-create-server.t @@ -49,7 +49,7 @@ my $chat_completion_input = { sub mk_req($uri, $content) { my $content_json = encode_json($content); - return $http_client->POST("http://127.0.0.1:$port/v1".$uri, $content_json, headers => {"Content-Type" => "application/json"}); + return $http_client->POST("http://127.0.0.1:$port/v1".$uri, $content_json, content_type => 'application/json'); } my $res = await mk_req("/chat/completions", $chat_completion_input); diff --git a/t/lib/OpenAIAsync/Server/API/Test/ChatCompletion.pm b/t/lib/OpenAIAsync/Server/API/Test/ChatCompletion.pm index 739281a..7822357 100644 --- a/t/lib/OpenAIAsync/Server/API/Test/ChatCompletion.pm +++ b/t/lib/OpenAIAsync/Server/API/Test/ChatCompletion.pm @@ -37,9 +37,9 @@ role OpenAIAsync::Server::API::Test::ChatCompletion :strict(params) { model => "GumbyBrain-llm", system_fingerprint => "SHODAN node 12 of 16 tertiary adjunct of unimatrix 42", usage => { - 42, - 6, - 9, + total_tokens => 42, + prompt_tokens => 6, + completion_tokens => 9, }, object => "text_completion", created => 0,