Skip to content

Commit db6384e

Browse files
committed
Added Morgan fingerprint example [skip ci]
1 parent 74ceb9d commit db6384e

3 files changed

Lines changed: 44 additions & 0 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ Or check out some examples:
3535
- [Binary embeddings](examples/cohere/example.js) with Cohere
3636
- [Sentence embeddings](examples/transformers/example.js) with Transformers.js
3737
- [Hybrid search](examples/hybrid-search/example.js) with Transformers.js
38+
- [Morgan fingerprints](examples/rdkit/example.js) with RDKit.js
3839
- [Recommendations](examples/disco/example.js) with Disco
3940
- [Horizontal scaling](examples/citus/example.js) with Citus
4041
- [Bulk loading](examples/loading/example.js) with `COPY`

examples/rdkit/example.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import pg from 'pg';
2+
import pgvector from 'pgvector/pg';
3+
import initRDKitModule from '@rdkit/rdkit';
4+
5+
const RDKit = await initRDKitModule();
6+
7+
function generateFingerprint(molecule) {
8+
const options = {radius: 3};
9+
return RDKit.get_mol(molecule).get_morgan_fp(JSON.stringify(options));
10+
}
11+
12+
const client = new pg.Client({database: 'pgvector_example'});
13+
await client.connect();
14+
15+
await client.query('CREATE EXTENSION IF NOT EXISTS vector');
16+
await pgvector.registerTypes(client);
17+
18+
await client.query('DROP TABLE IF EXISTS molecules');
19+
await client.query('CREATE TABLE molecules (id text PRIMARY KEY, fingerprint bit(2048))');
20+
21+
const molecules = ['Cc1ccccc1', 'Cc1ncccc1', 'c1ccccn1'];
22+
for (const molecule of molecules) {
23+
const fingerprint = generateFingerprint(molecule);
24+
await client.query('INSERT INTO molecules (id, fingerprint) VALUES ($1, $2)', [molecule, fingerprint]);
25+
}
26+
27+
const queryMolecule = 'c1ccco1';
28+
const queryFingerprint = generateFingerprint(queryMolecule);
29+
const { rows } = await client.query('SELECT id, fingerprint <%> $1 AS distance FROM molecules ORDER BY distance LIMIT 5', [queryFingerprint]);
30+
for (let row of rows) {
31+
console.log(row);
32+
}
33+
34+
await client.end();

examples/rdkit/package.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"private": true,
3+
"type": "module",
4+
"dependencies": {
5+
"@rdkit/rdkit": "^2023.9.2-1.0.0",
6+
"pg": "^8.11.3",
7+
"pgvector": "file:../.."
8+
}
9+
}

0 commit comments

Comments
 (0)