File Coverage

blib/lib/WebService/Chroma/Collection.pm
Criterion Covered Total %
statement 9 16 56.2
branch 0 2 0.0
condition 0 3 0.0
subroutine 3 4 75.0
pod n/a
total 12 25 48.0


line stmt bran cond sub pod time code
1             package WebService::Chroma::Collection;
2              
3 1     1   8 use Moo;
  1         3  
  1         7  
4              
5 1     1   490 use MooX::ValidateSubs;
  1         3  
  1         6  
6 1     1   903 use Types::Standard qw/Str Int ArrayRef HashRef ScalarRef/;
  1         3  
  1         60  
7              
8             validate_subs (
9             add => {
10             params => {
11             embeddings => [ArrayRef, 1],
12             metadatas => [ArrayRef, 1],
13             uris => [ArrayRef, 1],
14             documents => [ArrayRef],
15             ids => [ArrayRef],
16             }
17             },
18             upsert => {
19             params => {
20             embeddings => [ArrayRef, 1],
21             metadatas => [ArrayRef, 1],
22             uris => [ArrayRef, 1],
23             documents => [ArrayRef],
24             ids => [ArrayRef],
25             }
26             },
27             update => {
28             params => {
29             embeddings => [ArrayRef, 1],
30             metadatas => [ArrayRef, 1],
31             uris => [ArrayRef, 1],
32             documents => [ArrayRef],
33             ids => [ArrayRef],
34             }
35             },
36             get => {
37             params => {
38             ids => [ArrayRef, 1],
39             where => [HashRef, 1],
40             where_document => [HashRef, 1],
41             sort => [Str, 1],
42             limit => [Int, 1],
43             offset => [Int, 1],
44             include => [ArrayRef, 1]
45             }
46             },
47             delete => {
48             params => {
49             ids => [ArrayRef, 1],
50             where => [HashRef, 1],
51             where_document => [HashRef, 1],
52             }
53             },
54             query => {
55             params => {
56             query_texts => [ArrayRef, 1],
57             query_embeddings => [ArrayRef, 1],
58             n_results => [Int, 1],
59             include => [ArrayRef, 1],
60             where => [HashRef, 1],
61             where_document => [HashRef, 1],
62             }
63             },
64             count => {
65             params => {}
66             }
67             );
68              
69             has ua => (
70             is => 'ro',
71             required => 1,
72             );
73              
74             has tenant => (
75             is => 'ro',
76             required => 1,
77             );
78              
79             has db => (
80             is => 'ro',
81             required => 1,
82             );
83              
84             has id => (
85             is => 'ro',
86             required => 1,
87             );
88              
89             has name => (
90             is => 'ro',
91             required => 1,
92             );
93              
94              
95             sub _automagic_embeddings {
96 0     0     my ($self, $data) = @_;
97              
98 0 0 0       if (! $data->{embeddings} && $self->ua->embeddings) {
99 0           $data->{embeddings} = [];
100 0           for (@{ $data->{documents} }) {
  0            
101 0           push @{$data->{embeddings}}, $self->ua->embeddings->get($_);
  0            
102             }
103             }
104             }
105              
106             sub add {
107             my ($self, %data) = @_;
108            
109             $self->_automagic_embeddings(\%data);
110              
111             return $self->ua->post(
112             url => sprintf('/api/v2/tenants/%s/databases/%s/collections/%s/add', $self->tenant, $self->db, $self->id),
113             data => \%data
114             );
115             }
116              
117             sub upsert {
118             my ($self, %data) = @_;
119              
120             $self->_automagic_embeddings(\%data);
121            
122             return $self->ua->post(
123             url => sprintf('/api/v2/tenants/%s/databases/%s/collections/%s/upsert', $self->tenant, $self->db, $self->id),
124             data => \%data
125             );
126             }
127              
128             sub update {
129             my ($self, %data) = @_;
130            
131             $self->_automagic_embeddings(\%data);
132            
133             return $self->ua->post(
134             url => sprintf('/api/v2/tenants/%s/databases/%s/collections/%s/update', $self->tenant, $self->db, $self->id),
135             data => \%data
136             );
137             }
138              
139             sub get {
140             my ($self, %data) = @_;
141              
142             return $self->ua->post(
143             url => sprintf('/api/v2/tenants/%s/databases/%s/collections/%s/get', $self->tenant, $self->db, $self->id),
144             data => \%data
145             );
146             }
147              
148             sub query {
149             my ($self, %data) = @_;
150              
151             if ($data{query_texts} && $self->ua->embeddings) {
152             $data{query_embeddings} = [ map { $self->ua->embeddings->get($_) } @{ delete $data{query_texts} } ];
153             }
154              
155             return $self->ua->post(
156             url => sprintf('/api/v2/tenants/%s/databases/%s/collections/%s/query', $self->tenant, $self->db, $self->id),
157             data => \%data
158             );
159             }
160              
161             sub delete {
162             my ($self, %data) = @_;
163            
164             return $self->ua->post(
165             url => sprintf('/api/v2/tenants/%s/databases/%s/collections/%s/delete', $self->tenant, $self->db, $self->id),
166             data => \%data
167             );
168             }
169              
170             sub count {
171             my ($self, %data) = @_;
172              
173             return $self->ua->get(
174             url => sprintf('/api/v2/tenants/%s/databases/%s/collections/%s/count', $self->tenant, $self->db, $self->id),
175             )
176             }
177              
178             1;
179              
180             __END__