Group
Extension

RT-Extension-AI/lib/RT/Extension/AI/Provider/Gemini.pm

package RT::Extension::AI::Provider::Gemini;

use strict;
use warnings;

use base 'RT::Extension::AI::Provider';

use JSON;

sub default_headers {
    my ( $class, $config ) = @_;
    return { 'x-goog-api-key' => $config->{api_key} };
}

sub process_request {
    my ( $self, %args ) = @_;
    my $ua = $self->{ua};

    my $request_payload = {
        contents => [
            {   role  => "user",
                parts =>
                    [ { text => $args{prompt} . "\n" . $args{raw_text} } ],
            }
        ]
    };

    my $response = $ua->post(
        $self->{api_url},
        Content      => encode_json($request_payload),
        Content_Type => 'application/json'
    );

    if ( $response->is_success ) {
        my $content = decode_json( $response->decoded_content );

        my $candidate = $content->{candidates}[0];
        return {
            success => 0,
            error   => "No candidates in response",
            raw     => $content
            }
            unless $candidate;

        my $result = $candidate->{content}{parts}[0]{text};
        return {
            success => 1,
            result  => $result,
            raw     => $content,
        };
    } else {
        return {
            success => 0,
            error   => $response->status_line,
            raw     => $response->decoded_content,
        };
    }
}

1;


Powered by Groonga
Maintained by Kenichi Ishigaki <ishigaki@cpan.org>. If you find anything, submit it on GitHub.