pgvector support for Dart
Supports the postgres package
Run:
dart pub add pgvector
And follow the instructions for your database library:
Or check out some examples:
- Embeddings with OpenAI
- Binary embeddings with Cohere
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
View the changelog
Everyone is encouraged to help improve this project. Here are a few ways you can help:
- Report bugs
- Fix bugs and submit pull requests
- Write, clarify, or fix documentation
- Suggest or add new features
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