Skip to content

Commit

Permalink
Added typecasting for Sequel
Browse files Browse the repository at this point in the history
  • Loading branch information
ankane committed Jun 4, 2023
1 parent 300eb26 commit 25fec94
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 4 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ end
Insert a vector

```ruby
Item.create(embedding: Pgvector.encode([1, 1, 1]))
Item.create(embedding: [1, 1, 1])
```

Get the nearest neighbors to a record
Expand Down
8 changes: 8 additions & 0 deletions lib/sequel/plugins/pgvector.rb
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,14 @@ def nearest_neighbors(column, **options)
.nearest_neighbors(column, self[column], **options)
.exclude(primary_key => self[primary_key])
end

def []=(k, v)
if self.class.vector_columns.key?(k) && !v.is_a?(String)
super(k, ::Pgvector.encode(v))
else
super
end
end
end
end
end
Expand Down
6 changes: 3 additions & 3 deletions test/sequel_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ def test_dataset
end

def test_model
Item.create(embedding: Pgvector.encode([1, 1, 1]))
Item.create(embedding: Pgvector.encode([2, 2, 2]))
Item.create(embedding: Pgvector.encode([1, 1, 2]))
Item.create(embedding: [1, 1, 1])
Item.create(embedding: [2, 2, 2])
Item.create(embedding: [1, 1, 2])

results = Item.nearest_neighbors(:embedding, [1, 1, 1], distance: "euclidean").limit(5)
assert_equal ["[1,1,1]", "[1,1,2]", "[2,2,2]"], results.map(&:embedding)
Expand Down

0 comments on commit 25fec94

Please sign in to comment.