vector-inspector 0.2.6__py3-none-any.whl → 0.3.1__py3-none-any.whl

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.
Files changed (38) hide show
  1. vector_inspector/config/__init__.py +4 -0
  2. vector_inspector/config/known_embedding_models.json +432 -0
  3. vector_inspector/core/cache_manager.py +159 -0
  4. vector_inspector/core/connection_manager.py +277 -0
  5. vector_inspector/core/connections/__init__.py +2 -1
  6. vector_inspector/core/connections/base_connection.py +42 -1
  7. vector_inspector/core/connections/chroma_connection.py +137 -16
  8. vector_inspector/core/connections/pinecone_connection.py +768 -0
  9. vector_inspector/core/connections/qdrant_connection.py +62 -8
  10. vector_inspector/core/embedding_providers/__init__.py +14 -0
  11. vector_inspector/core/embedding_providers/base_provider.py +128 -0
  12. vector_inspector/core/embedding_providers/clip_provider.py +260 -0
  13. vector_inspector/core/embedding_providers/provider_factory.py +176 -0
  14. vector_inspector/core/embedding_providers/sentence_transformer_provider.py +203 -0
  15. vector_inspector/core/embedding_utils.py +167 -0
  16. vector_inspector/core/model_registry.py +205 -0
  17. vector_inspector/services/backup_restore_service.py +19 -29
  18. vector_inspector/services/credential_service.py +130 -0
  19. vector_inspector/services/filter_service.py +1 -1
  20. vector_inspector/services/profile_service.py +409 -0
  21. vector_inspector/services/settings_service.py +136 -1
  22. vector_inspector/ui/components/connection_manager_panel.py +327 -0
  23. vector_inspector/ui/components/profile_manager_panel.py +565 -0
  24. vector_inspector/ui/dialogs/__init__.py +6 -0
  25. vector_inspector/ui/dialogs/cross_db_migration.py +383 -0
  26. vector_inspector/ui/dialogs/embedding_config_dialog.py +315 -0
  27. vector_inspector/ui/dialogs/provider_type_dialog.py +189 -0
  28. vector_inspector/ui/main_window.py +456 -190
  29. vector_inspector/ui/views/connection_view.py +55 -10
  30. vector_inspector/ui/views/info_panel.py +272 -55
  31. vector_inspector/ui/views/metadata_view.py +71 -3
  32. vector_inspector/ui/views/search_view.py +44 -4
  33. vector_inspector/ui/views/visualization_view.py +19 -5
  34. {vector_inspector-0.2.6.dist-info → vector_inspector-0.3.1.dist-info}/METADATA +3 -1
  35. vector_inspector-0.3.1.dist-info/RECORD +55 -0
  36. vector_inspector-0.2.6.dist-info/RECORD +0 -35
  37. {vector_inspector-0.2.6.dist-info → vector_inspector-0.3.1.dist-info}/WHEEL +0 -0
  38. {vector_inspector-0.2.6.dist-info → vector_inspector-0.3.1.dist-info}/entry_points.txt +0 -0
@@ -12,6 +12,7 @@ from vector_inspector.core.connections.base_connection import VectorDBConnection
12
12
  from vector_inspector.ui.components.filter_builder import FilterBuilder
13
13
  from vector_inspector.ui.components.loading_dialog import LoadingDialog
14
14
  from vector_inspector.services.filter_service import apply_client_side_filters
15
+ from vector_inspector.core.cache_manager import get_cache_manager, CacheEntry
15
16
 
16
17
 
17
18
  class SearchView(QWidget):
@@ -21,8 +22,10 @@ class SearchView(QWidget):
21
22
  super().__init__(parent)
22
23
  self.connection = connection
23
24
  self.current_collection: str = ""
25
+ self.current_database: str = ""
24
26
  self.search_results: Optional[Dict[str, Any]] = None
25
27
  self.loading_dialog = LoadingDialog("Searching...", self)
28
+ self.cache_manager = get_cache_manager()
26
29
 
27
30
  self._setup_ui()
28
31
 
@@ -112,12 +115,30 @@ class SearchView(QWidget):
112
115
 
113
116
  layout.addWidget(splitter)
114
117
 
115
- def set_collection(self, collection_name: str):
118
+ def set_collection(self, collection_name: str, database_name: str = ""):
116
119
  """Set the current collection to search."""
117
120
  self.current_collection = collection_name
121
+ # Always update database_name if provided (even if empty string on first call)
122
+ if database_name: # Only update if non-empty
123
+ self.current_database = database_name
124
+
125
+ print(f"[SearchView] Setting collection: db='{self.current_database}', coll='{collection_name}'")
126
+
127
+ # Check cache first
128
+ cached = self.cache_manager.get(self.current_database, self.current_collection)
129
+ if cached:
130
+ print(f"[SearchView] ✓ Cache HIT! Restoring search state.")
131
+ # Restore search query and results from cache
132
+ if cached.search_query:
133
+ self.query_input.setPlainText(cached.search_query)
134
+ if cached.search_results:
135
+ self.search_results = cached.search_results
136
+ self._display_results(cached.search_results)
137
+ return
138
+
139
+ print(f"[SearchView] ✗ Cache MISS or no cached search.")
140
+ # Not in cache, clear form
118
141
  self.search_results = None
119
-
120
- # Clear search form inputs
121
142
  self.query_input.clear()
122
143
  self.results_table.setRowCount(0)
123
144
  self.results_status.setText(f"Collection: {collection_name}")
@@ -181,7 +202,7 @@ class SearchView(QWidget):
181
202
  QApplication.processEvents()
182
203
 
183
204
  try:
184
- # Perform query
205
+ # Always pass query_texts; provider handles embedding if needed
185
206
  results = self.connection.query_collection(
186
207
  self.current_collection,
187
208
  query_texts=[query_text],
@@ -196,6 +217,12 @@ class SearchView(QWidget):
196
217
  self.results_table.setRowCount(0)
197
218
  return
198
219
 
220
+ # Check if results have the expected structure
221
+ if not results.get("ids") or not isinstance(results["ids"], list) or len(results["ids"]) == 0:
222
+ self.results_status.setText("No results found or query failed")
223
+ self.results_table.setRowCount(0)
224
+ return
225
+
199
226
  # Apply client-side filters if any
200
227
  if client_filters and results:
201
228
  # Restructure results for filtering
@@ -219,6 +246,19 @@ class SearchView(QWidget):
219
246
  self.search_results = results
220
247
  self._display_results(results)
221
248
 
249
+ # Save to cache
250
+ if self.current_database and self.current_collection:
251
+ self.cache_manager.update(
252
+ self.current_database,
253
+ self.current_collection,
254
+ search_query=query_text,
255
+ search_results=results,
256
+ user_inputs={
257
+ 'n_results': n_results,
258
+ 'filters': self.filter_builder.to_dict() if hasattr(self.filter_builder, 'to_dict') else {}
259
+ }
260
+ )
261
+
222
262
  def _display_results(self, results: Dict[str, Any]):
223
263
  """Display search results in table."""
224
264
  ids = results.get("ids", [[]])[0]
@@ -13,6 +13,7 @@ import numpy as np
13
13
 
14
14
  from vector_inspector.core.connections.base_connection import VectorDBConnection
15
15
  from vector_inspector.services.visualization_service import VisualizationService
16
+ from vector_inspector.ui.components.loading_dialog import LoadingDialog
16
17
 
17
18
 
18
19
  class VisualizationThread(QThread):
@@ -106,6 +107,9 @@ class VisualizationView(QWidget):
106
107
  self.status_label.setMaximumHeight(30)
107
108
  layout.addWidget(self.status_label)
108
109
 
110
+ # Loading dialog for data fetch and reduction
111
+ self.loading_dialog = LoadingDialog("Loading visualization...", self)
112
+
109
113
  def set_collection(self, collection_name: str):
110
114
  """Set the current collection to visualize."""
111
115
  self.current_collection = collection_name
@@ -119,12 +123,17 @@ class VisualizationView(QWidget):
119
123
  QMessageBox.warning(self, "No Collection", "Please select a collection first.")
120
124
  return
121
125
 
122
- # Load data with embeddings
126
+ # Load data with embeddings (show loading immediately)
127
+ self.loading_dialog.show_loading("Loading data for visualization...")
128
+ QApplication.processEvents()
123
129
  sample_size = self.sample_spin.value()
124
- data = self.connection.get_all_items(
125
- self.current_collection,
126
- limit=sample_size
127
- )
130
+ try:
131
+ data = self.connection.get_all_items(
132
+ self.current_collection,
133
+ limit=sample_size
134
+ )
135
+ finally:
136
+ self.loading_dialog.hide_loading()
128
137
 
129
138
  if data is None or not data or "embeddings" not in data or data["embeddings"] is None or len(data["embeddings"]) == 0:
130
139
  QMessageBox.warning(
@@ -152,10 +161,14 @@ class VisualizationView(QWidget):
152
161
  )
153
162
  self.visualization_thread.finished.connect(self._on_reduction_finished)
154
163
  self.visualization_thread.error.connect(self._on_reduction_error)
164
+ # Show loading during reduction
165
+ self.loading_dialog.show_loading("Reducing dimensions...")
166
+ QApplication.processEvents()
155
167
  self.visualization_thread.start()
156
168
 
157
169
  def _on_reduction_finished(self, reduced_data: Any):
158
170
  """Handle dimensionality reduction completion."""
171
+ self.loading_dialog.hide_loading()
159
172
  self.reduced_data = reduced_data
160
173
  self._create_plot()
161
174
  self.generate_button.setEnabled(True)
@@ -163,6 +176,7 @@ class VisualizationView(QWidget):
163
176
 
164
177
  def _on_reduction_error(self, error_msg: str):
165
178
  """Handle dimensionality reduction error."""
179
+ self.loading_dialog.hide_loading()
166
180
  print(f"Error: Visualization failed: {error_msg}")
167
181
  QMessageBox.warning(self, "Error", f"Visualization failed: {error_msg}")
168
182
  self.generate_button.setEnabled(True)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vector-inspector
3
- Version: 0.2.6
3
+ Version: 0.3.1
4
4
  Summary: A comprehensive desktop application for visualizing, querying, and managing vector database data
5
5
  Author-Email: Anthony Dawson <anthonypdawson+github@gmail.com>
6
6
  License: MIT
@@ -22,6 +22,8 @@ Requires-Dist: sentence-transformers>=2.2.0
22
22
  Requires-Dist: fastembed>=0.7.4
23
23
  Requires-Dist: pyarrow>=14.0.0
24
24
  Requires-Dist: pinecone>=8.0.0
25
+ Requires-Dist: keyring>=25.7.0
26
+ Requires-Dist: hf-xet>=1.2.0
25
27
  Description-Content-Type: text/markdown
26
28
 
27
29
 
@@ -0,0 +1,55 @@
1
+ vector_inspector-0.3.1.dist-info/METADATA,sha256=VXsx5HkbOhkHfsjoZV29MYBh6s3hsdal-3l4ZAppN88,9684
2
+ vector_inspector-0.3.1.dist-info/WHEEL,sha256=tsUv_t7BDeJeRHaSrczbGeuK-TtDpGsWi_JfpzD255I,90
3
+ vector_inspector-0.3.1.dist-info/entry_points.txt,sha256=u96envMI2NFImZUJDFutiiWl7ZoHrrev9joAgtyvTxo,80
4
+ vector_inspector/__init__.py,sha256=Q8XbXn98o0eliQWPePhy-aGUz2KNnVg7bQq-sBPl7zQ,119
5
+ vector_inspector/__main__.py,sha256=Vdhw8YA1K3wPMlbJQYL5WqvRzAKVeZ16mZQFO9VRmCo,62
6
+ vector_inspector/config/__init__.py,sha256=vHkVsXSUdInsfzWSOLPZzaaELa3SGenAgfpY5EYbsYA,95
7
+ vector_inspector/config/known_embedding_models.json,sha256=tnTWI3OvdL2z0YreL_iBzbceIXR69NDj-0tBcEV6NVM,15701
8
+ vector_inspector/core/__init__.py,sha256=hjOqiJwF1P0rXjiOKhK4qDTvBY7G3m4kq8taH-gKrFM,57
9
+ vector_inspector/core/cache_manager.py,sha256=cHdbIYR-eS9vLLTqvq4Xejyi5Z7Fm9DqMhb_PMZjnjY,5695
10
+ vector_inspector/core/connection_manager.py,sha256=WwiVedHWTfqIuJKV7D52bYEupmpnnSPKcgG1odJCJjs,10003
11
+ vector_inspector/core/connections/__init__.py,sha256=lDZ-Qv-CbBvVcSlT8K2824zojovEIKhykHVSLARHZWs,345
12
+ vector_inspector/core/connections/base_connection.py,sha256=dQTNmYGCt3-rGjTkAj0vuTEAsFnp8i_FcPmlz6CYdV4,8909
13
+ vector_inspector/core/connections/chroma_connection.py,sha256=wN1apwGLStjOd113Cd1jC--pxJVMHeX7CrtM1Ba0OL4,19753
14
+ vector_inspector/core/connections/pinecone_connection.py,sha256=zdBK2yetVDwxLZV0PxJfnKbZHAWLvb3apsO8wBdVlbE,26942
15
+ vector_inspector/core/connections/qdrant_connection.py,sha256=m0EFgSbWRVh3uv_JkbB0WEotu20G967TrHvwJrtedO4,31861
16
+ vector_inspector/core/connections/template_connection.py,sha256=wsJiE4ma3cLUXk2eW5rnLMS5wG8JTekgEn46lHHQNoc,10642
17
+ vector_inspector/core/embedding_providers/__init__.py,sha256=anorFsmLVrdK6bHP8YcPZF9DQTIJ9CEnrmJRnqOzWdc,440
18
+ vector_inspector/core/embedding_providers/base_provider.py,sha256=SqQFoE6lmmxCdns6ce36_x5Ucivvo5jSp8HEbzs7kLw,3933
19
+ vector_inspector/core/embedding_providers/clip_provider.py,sha256=vvFqoQZNB0PsFJxvDsoDf8-L_z61CrYROFT9IGt7nIE,9088
20
+ vector_inspector/core/embedding_providers/provider_factory.py,sha256=aMoF9NEslTg_4f3QlIr-v0fXg0rb1zNfmavnPVczNy0,5973
21
+ vector_inspector/core/embedding_providers/sentence_transformer_provider.py,sha256=3YGUt7-6VrfbWKMuo3vDzx9SJXi2CjbpdOqdtE5CymM,6913
22
+ vector_inspector/core/embedding_utils.py,sha256=TcSZyVRZmmV9LlYCq8BJMZXTWfkGAYLFtcXXv-M15r8,5650
23
+ vector_inspector/core/model_registry.py,sha256=8zr-bhMqxwuHZ3MeTrG6NItUHfmcFoypGuP5o1PYXvU,6194
24
+ vector_inspector/main.py,sha256=puu1Fur298j6H8fG3_wF85RMhi4tjLZ0Are16kloMqM,479
25
+ vector_inspector/services/__init__.py,sha256=QLgH7oybjHuEYDFNiBgmJxvSpgAzHEuBEPXa3SKJb_I,67
26
+ vector_inspector/services/backup_restore_service.py,sha256=uqbVdCAb78HWZPDu6T0NONy4w7BFPhYsmy7omChdxkg,11582
27
+ vector_inspector/services/credential_service.py,sha256=pdpglvLABnYQRvklgK38iPyG91IZ9Nm8WQFT9V0LofM,4354
28
+ vector_inspector/services/filter_service.py,sha256=xDrMxNWsYzRcR1n0Fd-yp6Fo-4aLbVIDkhj2GKmrw5o,2370
29
+ vector_inspector/services/import_export_service.py,sha256=OPCrBXBewCznu5o8wFGvduU0jGZAcBvp_Fpv15kdoJ4,10712
30
+ vector_inspector/services/profile_service.py,sha256=Uhl9urxeSRI0p-mfaYgBrMI99byNIxJSodcXOgD_ybw,13408
31
+ vector_inspector/services/settings_service.py,sha256=Yw5wvqpf7hjwVjvZRXxBgIKH8tj8sKfXAavoeOhtvsU,7648
32
+ vector_inspector/services/visualization_service.py,sha256=mHI4qxT-V4R1kcOhE508vFTZ0HcmQICHvJ7dIoRracQ,4373
33
+ vector_inspector/ui/__init__.py,sha256=262ZiXO6Luk8vZnhCIoYxOtGiny0bXK-BTKjxUNBx-w,43
34
+ vector_inspector/ui/components/__init__.py,sha256=S-GWU1P820dJ6mHmeeBEy-CGF9fjpBeNf8vrbhRlFMk,30
35
+ vector_inspector/ui/components/backup_restore_dialog.py,sha256=CrZ2u8vXzggv3aBkYR4FulpY74oZWMLW5BHU4dMiWug,13073
36
+ vector_inspector/ui/components/connection_manager_panel.py,sha256=O0V7kE6immkWzO7bGYehCLqyz62va_421aL0EncuVQ8,13279
37
+ vector_inspector/ui/components/filter_builder.py,sha256=NSR_hp-rzUZVAca6dIJhTxZA3igOKFM1g-YXiYPhFos,13360
38
+ vector_inspector/ui/components/item_dialog.py,sha256=VMwehEjQ6xrdxWygR9J-hHsLfzOVb_E3ePUGYO_c7XA,3951
39
+ vector_inspector/ui/components/loading_dialog.py,sha256=YEKYGU-R-Zz4CjXSArJtkNxgTy4O9hI5Bbt6qlIzD8U,1018
40
+ vector_inspector/ui/components/profile_manager_panel.py,sha256=3CzJrY2pjzV8LAgJb0bLOKzK4Buy8v5P8rFqJfrXdRs,20966
41
+ vector_inspector/ui/dialogs/__init__.py,sha256=xtT77L91PFfm3zHYRENHkWHJaKPm1htuUzRXAF53P8w,211
42
+ vector_inspector/ui/dialogs/cross_db_migration.py,sha256=KGtlewzA83Xwkl0J1TUYUhiccYIXbRuNxHO59kNP_tI,15783
43
+ vector_inspector/ui/dialogs/embedding_config_dialog.py,sha256=Pm6UBHmkcof3x1xXLiGLiMP6jLBcJvsPfY6df5jTtK4,13037
44
+ vector_inspector/ui/dialogs/provider_type_dialog.py,sha256=W_FAJuvicwBUJJ7PyvKow9lc8_a5pnE3RIAsh-DVndQ,6809
45
+ vector_inspector/ui/main_window.py,sha256=-l-S8GSAebIfu8YrGNUEetUlub5XB3jR-symaap8450,26207
46
+ vector_inspector/ui/views/__init__.py,sha256=FeMtVzSbVFBMjdwLQSQqD0FRW4ieJ4ZKXtTBci2e_bw,30
47
+ vector_inspector/ui/views/collection_browser.py,sha256=oG9_YGPoVuMs-f_zSd4EcITmEU9caxvwuubsFUrNf-c,3991
48
+ vector_inspector/ui/views/connection_view.py,sha256=bfVRvcS2gLVC6ESux3RcNhYEwFhxp6NpByqJ2bfetvI,20204
49
+ vector_inspector/ui/views/info_panel.py,sha256=fgxIjs5AlnyE0Ni5ZXWfrB3nb6O6w1rAOnMnW-akiBs,23848
50
+ vector_inspector/ui/views/metadata_view.py,sha256=dIe7aH47xd6TBK2g-WogR2Ts0enHGeSAEUlu48sdTF8,30535
51
+ vector_inspector/ui/views/search_view.py,sha256=Yrg7akY1vDgpWny-3Us6r1LQhd0QHB7fUvCZj1VpnA0,12522
52
+ vector_inspector/ui/views/visualization_view.py,sha256=Z-oDwKSAxYx9yhln6pM00j9pWokjz5eYZMJ-Japg938,9841
53
+ vector_inspector/utils/__init__.py,sha256=jhHBQC8C8bfhNlf6CAt07ejjStp_YAyleaYr2dm0Dk0,38
54
+ vector_inspector/utils/lazy_imports.py,sha256=2XZ3ZnwTvZ5vvrh36nJ_TUjwwkgjoAED6i6P9yctvt0,1211
55
+ vector_inspector-0.3.1.dist-info/RECORD,,
@@ -1,35 +0,0 @@
1
- vector_inspector-0.2.6.dist-info/METADATA,sha256=TZTo9zaLOPYqQkGQcPNoPgTXflQYhVh7BNbsnBGrhhw,9624
2
- vector_inspector-0.2.6.dist-info/WHEEL,sha256=tsUv_t7BDeJeRHaSrczbGeuK-TtDpGsWi_JfpzD255I,90
3
- vector_inspector-0.2.6.dist-info/entry_points.txt,sha256=u96envMI2NFImZUJDFutiiWl7ZoHrrev9joAgtyvTxo,80
4
- vector_inspector/__init__.py,sha256=Q8XbXn98o0eliQWPePhy-aGUz2KNnVg7bQq-sBPl7zQ,119
5
- vector_inspector/__main__.py,sha256=Vdhw8YA1K3wPMlbJQYL5WqvRzAKVeZ16mZQFO9VRmCo,62
6
- vector_inspector/core/__init__.py,sha256=hjOqiJwF1P0rXjiOKhK4qDTvBY7G3m4kq8taH-gKrFM,57
7
- vector_inspector/core/connections/__init__.py,sha256=cCwDy69Jy8ajiFQICcWfPnGoMtfrq69brzXJ4sVYCQ0,271
8
- vector_inspector/core/connections/base_connection.py,sha256=PiwVlrk-eUKSka6gmE2GSyml0xe48PrIWAcKhBJMBv8,7131
9
- vector_inspector/core/connections/chroma_connection.py,sha256=8dmMtTeMylZRqIvjbBgH6BWqbdd4vv9bJ9uf-C7fLHw,13943
10
- vector_inspector/core/connections/qdrant_connection.py,sha256=jjqRR_zJ-d2Kq9jS2_v6zTE_PY3HI_oss8mJi6gDZvo,28634
11
- vector_inspector/core/connections/template_connection.py,sha256=wsJiE4ma3cLUXk2eW5rnLMS5wG8JTekgEn46lHHQNoc,10642
12
- vector_inspector/main.py,sha256=puu1Fur298j6H8fG3_wF85RMhi4tjLZ0Are16kloMqM,479
13
- vector_inspector/services/__init__.py,sha256=QLgH7oybjHuEYDFNiBgmJxvSpgAzHEuBEPXa3SKJb_I,67
14
- vector_inspector/services/backup_restore_service.py,sha256=2bbmLamGg7gaYUl3zy_-8wL8xbYvO00kZ2tbImZkzi0,11782
15
- vector_inspector/services/filter_service.py,sha256=r1y_lPi4Mo4ZqVq_hfbTzRxcCbdH7RlsXg7ytkBTKi8,2334
16
- vector_inspector/services/import_export_service.py,sha256=OPCrBXBewCznu5o8wFGvduU0jGZAcBvp_Fpv15kdoJ4,10712
17
- vector_inspector/services/settings_service.py,sha256=4QdUbd7k2YIPX2EWc8eHfx0L2uhsxpe-CgIVogVHVmk,2081
18
- vector_inspector/services/visualization_service.py,sha256=mHI4qxT-V4R1kcOhE508vFTZ0HcmQICHvJ7dIoRracQ,4373
19
- vector_inspector/ui/__init__.py,sha256=262ZiXO6Luk8vZnhCIoYxOtGiny0bXK-BTKjxUNBx-w,43
20
- vector_inspector/ui/components/__init__.py,sha256=S-GWU1P820dJ6mHmeeBEy-CGF9fjpBeNf8vrbhRlFMk,30
21
- vector_inspector/ui/components/backup_restore_dialog.py,sha256=CrZ2u8vXzggv3aBkYR4FulpY74oZWMLW5BHU4dMiWug,13073
22
- vector_inspector/ui/components/filter_builder.py,sha256=NSR_hp-rzUZVAca6dIJhTxZA3igOKFM1g-YXiYPhFos,13360
23
- vector_inspector/ui/components/item_dialog.py,sha256=VMwehEjQ6xrdxWygR9J-hHsLfzOVb_E3ePUGYO_c7XA,3951
24
- vector_inspector/ui/components/loading_dialog.py,sha256=YEKYGU-R-Zz4CjXSArJtkNxgTy4O9hI5Bbt6qlIzD8U,1018
25
- vector_inspector/ui/main_window.py,sha256=5icldgWWDEH3Ltp8yQze6NUWRe842KDiIB4_qOvP4WM,14193
26
- vector_inspector/ui/views/__init__.py,sha256=FeMtVzSbVFBMjdwLQSQqD0FRW4ieJ4ZKXtTBci2e_bw,30
27
- vector_inspector/ui/views/collection_browser.py,sha256=oG9_YGPoVuMs-f_zSd4EcITmEU9caxvwuubsFUrNf-c,3991
28
- vector_inspector/ui/views/connection_view.py,sha256=CpHPSDee3RhH3_wNu62RI3Fn5ffBIGt_Va5iC0p1IoY,18116
29
- vector_inspector/ui/views/info_panel.py,sha256=Rc45dCdrdPI2Ir0GBoKMZU9hPrWf4zFXlNYfLSMP_9U,13975
30
- vector_inspector/ui/views/metadata_view.py,sha256=NGd2lw7S0EhfV7HJGBcn4x1mg71W30YliEOTlW_dssM,26829
31
- vector_inspector/ui/views/search_view.py,sha256=p6vt2heSpEbiRge46VSedTZjg7i3-AWdS0f96JXzlEU,10527
32
- vector_inspector/ui/views/visualization_view.py,sha256=uPOUpKJ00eFqCCohYEfMD8D9lNv2cy2FymPHouXK0Go,9163
33
- vector_inspector/utils/__init__.py,sha256=jhHBQC8C8bfhNlf6CAt07ejjStp_YAyleaYr2dm0Dk0,38
34
- vector_inspector/utils/lazy_imports.py,sha256=2XZ3ZnwTvZ5vvrh36nJ_TUjwwkgjoAED6i6P9yctvt0,1211
35
- vector_inspector-0.2.6.dist-info/RECORD,,