chromable 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d33a705c79d42fb0495bb63e4ad7d04e8e3eea823400ea213f362af3e4ce09c8
4
- data.tar.gz: d18bc615f1a6b22530d76b06b471e07688be422a9af55a92d81419ae48eb4d84
3
+ metadata.gz: ad740d4c1d70642aa0e03518c74cb5e2b77a68df923a9e46e0797eb42908c312
4
+ data.tar.gz: 4cdb45e1599c5f579082cac30ff9c3887adaee9921d2bf73f20b6f96401769cd
5
5
  SHA512:
6
- metadata.gz: cfc65982c4f7952170630630eba0c6bf2bdc7708fae70727cb013d1cc1fe2b88b55e2bf08d9e0231864a0790373db2dfb1db95584c8ed328f0131c9e6a4c8d10
7
- data.tar.gz: 6a0b4a7af862ada818d888ed6ae672a23d85057726df9da40f3c715cd1c80fa71ebfac10e00833dd0cf9908b678d3746d3ead9d9cc6f73fc4ae23436a1e3a13e
6
+ metadata.gz: 19ee5d2e13a7b61962442766faa52f52930acc221b346ac91609eab01c1c9cb6aad01bfd96c444451925434c39ede78d7b949923a0824ef7ae89276b11c49869
7
+ data.tar.gz: 8de31a2f2b16402acef0d391e39a1049622dcbc3a69968ce0e8485492e1acbb7dae77ab88ae782bc1ef07ae42a43102929e5a47791a8c5443dd67f758e054c4b
data/README.md CHANGED
@@ -58,28 +58,32 @@ The only required option for `chromable` is `document:`.
58
58
 
59
59
  At this point, `chromable` will create, update, and destroy the ChromaDB embeddings for your objects based on Rails `after_save` and `after_destroy` callbacks.
60
60
 
61
- To interact with the ChromaDB collection, `chromable` provides `Model.query` method to query the collection and `Model.collection` method to access the collection directly.
61
+ To interact with the ChromaDB collection, `chromable` provides:
62
+ - `Model.query` to query the collection using similar API used in `chroma-db` gem, except for accepting `text:` instead of `query_embeddings:`. Extra arguments will be passed to the `embedder:` as `options`. Behind the scenes, `Model.query` will embed the given `text:`, then query the collection, and return the closest `results:` records.
63
+ - `Model.collection` to access the collection directly.
64
+ - `Model.delete_collection` to delete the entire collection.
62
65
 
63
66
  ```ruby
64
67
  puts Post.collection.count # Gets the number of documents inside the collection. Should always match Post.count.
65
68
 
66
69
  Post.query(
67
- query: params[:query],
70
+ text: params[:query],
68
71
  results: 20,
69
72
  where: chroma_search_filters,
70
73
  is_query: true # `is_query` here will be passed to `Post.embed` as an option.
71
74
  )
72
- ```
73
75
 
74
- `Model.query` accepts the same arguments accepted by `chroma-db` gem `query` method. Extra arguments will be passed to the `embedder:` as `options`. Behind the scenes, `Model.query` will embed the given `query:` text, then query the collection, and return the closest `results:` records.
76
+ Post.first.neighbors(results: 20) # => [#<Post:0x0000ffff9e0b5f10 id: "0beb0f98, ...>, ...]
77
+ ```
75
78
 
76
79
  Also, `chromable` provides the following methods for each model instance:
77
80
 
78
81
  - `embedding`: Retrieves the instance's ChromaDB embedding object.
79
82
  - `upsert_embedding`: Creates or updates the instance's ChromaDB embedding object.
80
83
  - `destroy_embedding`: Destroys the instance's ChromaDB embedding object.
84
+ - `neighbors`: Gets the closest `results:` records to the current record.
81
85
 
82
- All these methods (including `Model.query` and `Model.collection`) are available with `chroma_` prefix, if you have similar methods defined in your model.
86
+ All these methods (including `Model.query`, `Model.collection`, and `Model.delete_collection`) are available with `chroma_` prefix, if you have similar methods defined in your model.
83
87
 
84
88
  ## Development
85
89
 
@@ -89,7 +93,7 @@ To install this gem onto your local machine, run `bundle install`. To release a
89
93
 
90
94
  ## Contributing
91
95
 
92
- Bug reports and pull requests are welcome on GitHub at https://github.com/AliOsm/chromable. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/chromable/blob/main/CODE_OF_CONDUCT.md).
96
+ Bug reports and pull requests are welcome on GitHub at https://github.com/AliOsm/chromable. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/AliOsm/chromable/blob/main/CODE_OF_CONDUCT.md).
93
97
 
94
98
  ## License
95
99
 
@@ -97,4 +101,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
97
101
 
98
102
  ## Code of Conduct
99
103
 
100
- Everyone interacting in the Chromable project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/chromable/blob/main/CODE_OF_CONDUCT.md).
104
+ Everyone interacting in the Chromable project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/AliOsm/chromable/blob/main/CODE_OF_CONDUCT.md).
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Chromable
4
- VERSION = '0.3.0'
4
+ VERSION = '0.3.1'
5
5
  end
data/lib/chromable.rb CHANGED
@@ -51,14 +51,7 @@ module Chromable
51
51
  Chroma::Resources::Collection.delete(chromable_settings.collection_name)
52
52
  end
53
53
 
54
- def chroma_query( # rubocop:disable Metrics/ParameterLists
55
- text:,
56
- results: 10,
57
- where: {},
58
- where_document: {},
59
- include: %w[metadatas documents distances],
60
- **embedder_options
61
- )
54
+ def chroma_query(text:, results: 10, where: {}, where_document: {}, **embedder_options)
62
55
  find(chroma_collection.query(
63
56
  query_embeddings: [send(chromable_settings.embedder, text, **embedder_options)],
64
57
  results: results,
@@ -77,6 +70,7 @@ module Chromable
77
70
  alias_method :embedding, :chroma_embedding unless method_defined? :embedding
78
71
  alias_method :upsert_embedding, :chroma_upsert_embedding unless method_defined? :upsert_embedding
79
72
  alias_method :destroy_embedding, :chroma_destroy_embedding unless method_defined? :destroy_embedding
73
+ alias_method :neighbors, :chroma_neighbors unless method_defined? :neighbors
80
74
  # rubocop:enable Style/Alias
81
75
  end
82
76
  end
@@ -93,6 +87,20 @@ module Chromable
93
87
  self.class.chroma_collection.delete(ids: [id])
94
88
  end
95
89
 
90
+ def chroma_neighbors(results: 10, where: {}, where_document: {})
91
+ collection = self.class.chroma_collection
92
+
93
+ embedding = collection.get(ids: [id], include: [:embeddings])[0].embedding
94
+
95
+ self.class.find(collection.query(
96
+ query_embeddings: [embedding],
97
+ results: results,
98
+ where: where,
99
+ where_document: where_document,
100
+ include: include
101
+ ).map(&:id))
102
+ end
103
+
96
104
  private
97
105
 
98
106
  def build_embedding
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chromable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ali Hamdi Ali Fadel
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-12 00:00:00.000000000 Z
11
+ date: 2023-12-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chroma-db