AI-Anthropic
view release on metacpan or search on metacpan
name => 'get_weather',
description => 'Get current weather for a location',
input_schema => {
type => 'object',
properties => {
location => {
type => 'string',
description => 'City name',
},
},
required => ['location'],
},
},
],
);
```
## Response Object
```perl
my $response = $claude->message("Hello");
lib/AI/Anthropic.pm view on Meta::CPAN
Vugar Bakhshaliyev <d7951500@gmail.com>
=head1 LICENSE
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=head2 new
my $claude = AI::Anthropic->new(
api_key => 'your-api-key', # required (or use ANTHROPIC_API_KEY env)
model => 'claude-sonnet-4-20250514', # optional
max_tokens => 4096, # optional
timeout => 120, # optional, seconds
);
=cut
sub new {
my ($class, %args) = @_;
my $api_key = $args{api_key} // $ENV{ANTHROPIC_API_KEY}
or croak "API key required. Set api_key parameter or ANTHROPIC_API_KEY environment variable";
my $self = {
api_key => $api_key,
model => $args{model} // DEFAULT_MODEL,
max_tokens => $args{max_tokens} // 4096,
timeout => $args{timeout} // 120,
api_base => $args{api_base} // API_BASE,
_http => HTTP::Tiny->new(
timeout => $args{timeout} // 120,
),
lib/AI/Anthropic.pm view on Meta::CPAN
my $response = $claude->message("Your question here");
my $response = $claude->message("Your question", system => "You are helpful");
print $response->text;
=cut
sub message {
my ($self, $content, %opts) = @_;
croak "Message content required" unless defined $content;
return $self->chat(
messages => [ { role => 'user', content => $content } ],
%opts,
);
}
=head2 chat
Full chat interface:
my $response = $claude->chat(
messages => \@messages, # required
system => $system_prompt, # optional
model => $model, # optional, overrides default
max_tokens => $max_tokens, # optional
temperature => 0.7, # optional, 0.0-1.0
stream => \&callback, # optional, for streaming
tools => \@tools, # optional, for function calling
);
=cut
sub chat {
my ($self, %args) = @_;
my $messages = $args{messages}
or croak "messages parameter required";
# Build request body
my $body = {
model => $args{model} // $self->{model},
max_tokens => $args{max_tokens} // $self->{max_tokens},
messages => $self->_normalize_messages($messages),
};
# Optional parameters
$body->{system} = $args{system} if defined $args{system};
lib/AI/Anthropic.pm view on Meta::CPAN
name => 'get_weather',
description => 'Get current weather for a location',
input_schema => {
type => 'object',
properties => {
location => {
type => 'string',
description => 'City name',
},
},
required => ['location'],
},
},
],
);
=head2 Streaming
$claude->chat(
messages => [ { role => 'user', content => 'Tell me a story' } ],
stream => sub {
t/01-basic.t view on Meta::CPAN
# Test loading
use_ok('AI::Anthropic');
# Test object creation without API key (should fail gracefully later)
{
local $ENV{ANTHROPIC_API_KEY};
eval {
my $claude = AI::Anthropic->new();
};
like($@, qr/API key required/, 'Dies without API key');
}
# Test object creation with API key
{
my $claude = AI::Anthropic->new(api_key => 'test-key-123');
isa_ok($claude, 'AI::Anthropic');
}
# Test models list
{
( run in 0.450 second using v1.01-cache-2.11-cpan-e1769b4cff6 )