NAME

WebService::Qdrant - Easy client for Qdrant servers

VERSION

version 0.0001

SYNOPSIS

my $qdrant = WebService::Qdrant->new;

my $remote = WebService::Qdrant->new(
    base_url => 'https://qdrant.example.com:6333',
    api_key  => $api_key,
    timeout  => 60,
);

DESCRIPTION

A small synchronous client for Qdrant's collection and point APIs. All API methods return WebService::Qdrant::Response, including HTTP errors. Transport failures and invalid local arguments throw exceptions.

Each wrapper requires collection_name. Collection names are escaped as one URL path segment. Body fields use Qdrant's API names and ordinary Perl hashes and arrays; use JSON::MaybeXS booleans for JSON boolean values. Body schemas are validated by Qdrant rather than duplicated in this client.

SUBROUTINES/METHODS

collection_exists

my $response = $qdrant->collection_exists(collection_name => 'notes');
my $exists = $response->result->{exists} if $response->is_success;

Checks existence. Returns a response object, not a bare boolean.

create_collection

my $response = $qdrant->create_collection(
    collection_name => 'notes',
    vectors => { size => 3, distance => 'Cosine' },
    timeout => 10,
);

Creates a collection. Optional timeout goes in the URL. Remaining fields, including named vectors, sparse vectors, and collection configuration, are passed through as the JSON body.

delete_collection

my $response = $qdrant->delete_collection(collection_name => 'notes');

Deletes the collection and its data. Accepts optional timeout.

delete_points

my $response = $qdrant->delete_points(
    collection_name => 'notes', points => [0, 42],
    wait => JSON::MaybeXS::true(),
);

Deletes points selected by points (IDs) or filter. Optional wait, ordering, and timeout go in the URL. Remaining fields form the body.

get_collection

my $response = $qdrant->get_collection(collection_name => 'notes');

Retrieves collection configuration and statistics under result.

new

Constructs a client without making a network request. Accepts the attributes below as named arguments.

query_points

my $response = $qdrant->query_points(
    collection_name => 'notes', query => [0.1, 0.2, 0.3],
    limit => 5, with_payload => JSON::MaybeXS::true(),
);

Queries points; matches are under $response->result->{points}. Optional consistency and timeout go in the URL. Remaining fields, including query, filter, prefetch, and result options, form the body. query may be omitted for Qdrant's default query behavior.

upsert

my $response = $qdrant->upsert(
    collection_name => 'notes',
    points => [{ id => 0, vector => [0.1, 0.2, 0.3],
                 payload => { source => 'notes.md' } }],
    wait => JSON::MaybeXS::true(),
);

Inserts or replaces points. Accepts points or the Qdrant batch format. Optional wait, ordering, and timeout go in the URL. Other fields form the JSON body. An acknowledged operation may still be pending unless wait was requested; inspect the returned operation status.

ATTRIBUTES

base_url

Qdrant service URL. Defaults to http://localhost:6333.

api_key

Optional authentication key, sent in the api-key HTTP header.

timeout

HTTP timeout in seconds. Defaults to 30. This configures LWP::UserAgent and is separate from Qdrant's per-operation timeout parameter.

ua

Optional transport object, normally a WebService::Qdrant::UA instance. Useful for tests or custom HTTP configuration. An injected transport is used as supplied; configure its authentication and timeout on that object.

DIAGNOSTICS

Missing, empty, or reference-valued collection names throw before HTTP. Collection inspection and deletion methods reject unknown arguments. See WebService::Qdrant::UA for transport errors and WebService::Qdrant::Response for HTTP errors and JSON diagnostics.

SEE ALSO

https://api.qdrant.tech/v-1-18-x/api-reference, WebService::Qdrant::UA, WebService::Qdrant::Response

AUTHOR

D Ruth Holloway <ruth@hiruthie.me>

COPYRIGHT AND LICENSE

This software is copyright (c) 2026 by D Ruth Holloway.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.