pgvector-dart

pgvector support for Dart

Supports the postgres package

Build Status

Getting Started

Run:

dart pub add pgvector

And follow the instructions for your database library:

Or check out some examples:

postgres

Import the library

import 'package:pgvector/pgvector.dart';

Add the encoder

var connection = await Connection.open(endpoint,
    settings: ConnectionSettings(
        typeRegistry: TypeRegistry(encoders: [pgvectorEncoder])));

Enable the extension

await connection.execute('CREATE EXTENSION IF NOT EXISTS vector');

Create a table

await connection.execute('CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3))');

Insert vectors

await connection.execute(
    Sql.named('INSERT INTO items (embedding) VALUES (@a), (@b), (@c)'),
    parameters: {
      'a': Vector([1, 1, 1]),
      'b': Vector([2, 2, 2]),
      'c': Vector([1, 1, 2])
    });

Get the nearest neighbors

List<List<dynamic>> results = await connection.execute(
    Sql.named('SELECT id, embedding FROM items ORDER BY embedding <-> @embedding LIMIT 5'),
    parameters: {
      'embedding': Vector([1, 1, 1])
    });
for (final row in results) {
  print(row[0]);
  print(Vector.fromBinary(row[1].bytes));
}

Add an approximate index

await connection.execute('CREATE INDEX ON items USING hnsw (embedding vector_l2_ops)');
// or
await connection.execute('CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 100)');

Use vector_ip_ops for inner product and vector_cosine_ops for cosine distance

See a full example

History

View the changelog

Contributing

Everyone is encouraged to help improve this project. Here are a few ways you can help:

To get started with development:

git clone https://github.com/pgvector/pgvector-dart.git
cd pgvector-dart
createdb pgvector_dart_test
dart test

To run an example:

cd examples/openai
createdb pgvector_example
dart run example.dart

Libraries

pgvector