vector-inspector 0.3.2__py3-none-any.whl → 0.3.4__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 (32) hide show
  1. vector_inspector/core/connection_manager.py +55 -49
  2. vector_inspector/core/connections/base_connection.py +41 -41
  3. vector_inspector/core/connections/chroma_connection.py +110 -86
  4. vector_inspector/core/connections/pinecone_connection.py +168 -182
  5. vector_inspector/core/connections/qdrant_connection.py +109 -126
  6. vector_inspector/core/connections/qdrant_helpers/__init__.py +4 -0
  7. vector_inspector/core/connections/qdrant_helpers/qdrant_embedding_resolver.py +35 -0
  8. vector_inspector/core/connections/qdrant_helpers/qdrant_filter_builder.py +51 -0
  9. vector_inspector/core/connections/template_connection.py +55 -65
  10. vector_inspector/core/embedding_utils.py +32 -32
  11. vector_inspector/core/logging.py +27 -0
  12. vector_inspector/core/model_registry.py +4 -3
  13. vector_inspector/main.py +6 -2
  14. vector_inspector/services/backup_helpers.py +63 -0
  15. vector_inspector/services/backup_restore_service.py +73 -152
  16. vector_inspector/services/credential_service.py +33 -40
  17. vector_inspector/services/import_export_service.py +70 -67
  18. vector_inspector/services/profile_service.py +92 -94
  19. vector_inspector/services/settings_service.py +68 -48
  20. vector_inspector/services/visualization_service.py +40 -39
  21. vector_inspector/ui/components/splash_window.py +57 -0
  22. vector_inspector/ui/dialogs/cross_db_migration.py +6 -5
  23. vector_inspector/ui/main_window.py +200 -146
  24. vector_inspector/ui/views/info_panel.py +208 -127
  25. vector_inspector/ui/views/metadata_view.py +8 -7
  26. vector_inspector/ui/views/search_view.py +97 -75
  27. vector_inspector/ui/views/visualization_view.py +140 -97
  28. vector_inspector/utils/version.py +5 -0
  29. {vector_inspector-0.3.2.dist-info → vector_inspector-0.3.4.dist-info}/METADATA +10 -2
  30. {vector_inspector-0.3.2.dist-info → vector_inspector-0.3.4.dist-info}/RECORD +32 -25
  31. {vector_inspector-0.3.2.dist-info → vector_inspector-0.3.4.dist-info}/WHEEL +0 -0
  32. {vector_inspector-0.3.2.dist-info → vector_inspector-0.3.4.dist-info}/entry_points.txt +0 -0
@@ -1,40 +1,47 @@
1
1
  """Vector visualization view with dimensionality reduction."""
2
2
 
3
3
  from __future__ import annotations
4
- from typing import Optional, Dict, Any
4
+ from typing import Any
5
5
  import traceback
6
6
  from PySide6.QtWidgets import (
7
- QWidget, QVBoxLayout, QHBoxLayout, QPushButton,
8
- QLabel, QComboBox, QSpinBox, QGroupBox, QMessageBox, QApplication
7
+ QWidget,
8
+ QVBoxLayout,
9
+ QHBoxLayout,
10
+ QPushButton,
11
+ QLabel,
12
+ QComboBox,
13
+ QSpinBox,
14
+ QGroupBox,
15
+ QMessageBox,
16
+ QApplication,
9
17
  )
10
- from PySide6.QtCore import Qt, QThread, Signal
18
+ from PySide6.QtCore import QThread, Signal
11
19
  from PySide6.QtWebEngineWidgets import QWebEngineView
12
20
  import numpy as np
13
21
 
14
22
  from vector_inspector.core.connections.base_connection import VectorDBConnection
15
23
  from vector_inspector.services.visualization_service import VisualizationService
16
24
  from vector_inspector.ui.components.loading_dialog import LoadingDialog
25
+ from vector_inspector.core.logging import log_error
17
26
 
18
27
 
19
28
  class VisualizationThread(QThread):
20
29
  """Background thread for dimensionality reduction."""
21
-
30
+
22
31
  finished = Signal(np.ndarray)
23
32
  error = Signal(str)
24
-
33
+
25
34
  def __init__(self, embeddings, method, n_components):
26
35
  super().__init__()
27
36
  self.embeddings = embeddings
28
37
  self.method = method
29
38
  self.n_components = n_components
30
-
39
+
31
40
  def run(self):
32
41
  """Run dimensionality reduction."""
33
42
  try:
34
43
  result = VisualizationService.reduce_dimensions(
35
- self.embeddings,
36
- method=self.method,
37
- n_components=self.n_components
44
+ self.embeddings, method=self.method, n_components=self.n_components
38
45
  )
39
46
  if result is not None:
40
47
  self.finished.emit(result)
@@ -47,37 +54,37 @@ class VisualizationThread(QThread):
47
54
 
48
55
  class VisualizationView(QWidget):
49
56
  """View for visualizing vectors in 2D/3D."""
50
-
57
+
51
58
  def __init__(self, connection: VectorDBConnection, parent=None):
52
59
  super().__init__(parent)
53
60
  self.connection = connection
54
61
  self.current_collection: str = ""
55
- self.current_data: Optional[Dict[str, Any]] = None
56
- self.reduced_data: Optional[np.ndarray] = None
57
- self.visualization_thread: Optional[VisualizationThread] = None
58
-
62
+ self.current_data: dict[str, Any] | None = None
63
+ self.reduced_data: np.ndarray | None = None
64
+ self.visualization_thread: VisualizationThread | None = None
65
+ self.temp_html_files = []
59
66
  self._setup_ui()
60
-
67
+
61
68
  def _setup_ui(self):
62
69
  """Setup widget UI."""
63
70
  layout = QVBoxLayout(self)
64
-
71
+
65
72
  # Controls
66
73
  controls_group = QGroupBox("Visualization Settings")
67
74
  controls_layout = QHBoxLayout()
68
-
75
+
69
76
  # Method selection
70
77
  controls_layout.addWidget(QLabel("Method:"))
71
78
  self.method_combo = QComboBox()
72
79
  self.method_combo.addItems(["PCA", "t-SNE", "UMAP"])
73
80
  controls_layout.addWidget(self.method_combo)
74
-
81
+
75
82
  # Dimensions
76
83
  controls_layout.addWidget(QLabel("Dimensions:"))
77
84
  self.dimensions_combo = QComboBox()
78
85
  self.dimensions_combo.addItems(["2D", "3D"])
79
86
  controls_layout.addWidget(self.dimensions_combo)
80
-
87
+
81
88
  # Sample size
82
89
  controls_layout.addWidget(QLabel("Sample size:"))
83
90
  self.sample_spin = QSpinBox()
@@ -86,178 +93,214 @@ class VisualizationView(QWidget):
86
93
  self.sample_spin.setValue(500)
87
94
  self.sample_spin.setSingleStep(100)
88
95
  controls_layout.addWidget(self.sample_spin)
89
-
96
+
90
97
  controls_layout.addStretch()
91
-
98
+
92
99
  # Generate button
93
100
  self.generate_button = QPushButton("Generate Visualization")
94
101
  self.generate_button.clicked.connect(self._generate_visualization)
95
102
  controls_layout.addWidget(self.generate_button)
96
-
103
+
104
+ # Open in Browser button (next to generate)
105
+ self.open_browser_button = QPushButton("Open in Browser")
106
+ self.open_browser_button.setEnabled(False)
107
+ self.open_browser_button.clicked.connect(self._open_in_browser)
108
+ controls_layout.addWidget(self.open_browser_button)
109
+
97
110
  controls_group.setLayout(controls_layout)
98
111
  layout.addWidget(controls_group)
99
-
112
+
100
113
  # Embedded web view for Plotly
101
114
  self.web_view = QWebEngineView()
102
115
  layout.addWidget(self.web_view, stretch=10)
103
-
116
+
104
117
  # Status
105
118
  self.status_label = QLabel("No collection selected")
106
119
  self.status_label.setStyleSheet("color: gray;")
107
120
  self.status_label.setMaximumHeight(30)
108
121
  layout.addWidget(self.status_label)
109
-
122
+
110
123
  # Loading dialog for data fetch and reduction
111
124
  self.loading_dialog = LoadingDialog("Loading visualization...", self)
112
-
125
+
113
126
  def set_collection(self, collection_name: str):
114
127
  """Set the current collection to visualize."""
115
128
  self.current_collection = collection_name
116
129
  self.current_data = None
117
130
  self.reduced_data = None
118
131
  self.status_label.setText(f"Collection: {collection_name}")
119
-
132
+
120
133
  def _generate_visualization(self):
134
+ # Disable browser button until plot is generated
135
+ self.open_browser_button.setEnabled(False)
121
136
  """Generate visualization of vectors."""
122
137
  if not self.current_collection:
123
138
  QMessageBox.warning(self, "No Collection", "Please select a collection first.")
124
139
  return
125
-
140
+
126
141
  # Load data with embeddings (show loading immediately)
127
142
  self.loading_dialog.show_loading("Loading data for visualization...")
128
143
  QApplication.processEvents()
129
144
  sample_size = self.sample_spin.value()
130
145
  try:
131
- data = self.connection.get_all_items(
132
- self.current_collection,
133
- limit=sample_size
134
- )
146
+ data = self.connection.get_all_items(self.current_collection, limit=sample_size)
135
147
  finally:
136
148
  self.loading_dialog.hide_loading()
137
-
138
- if data is None or not data or "embeddings" not in data or data["embeddings"] is None or len(data["embeddings"]) == 0:
149
+
150
+ if (
151
+ data is None
152
+ or not data
153
+ or "embeddings" not in data
154
+ or data["embeddings"] is None
155
+ or len(data["embeddings"]) == 0
156
+ ):
139
157
  QMessageBox.warning(
140
158
  self,
141
159
  "No Data",
142
- "No embeddings found in collection. Make sure the collection contains vector embeddings."
160
+ "No embeddings found in collection. Make sure the collection contains vector embeddings.",
143
161
  )
144
162
  return
145
-
163
+
146
164
  self.current_data = data
147
165
  self.status_label.setText("Reducing dimensions...")
148
166
  self.generate_button.setEnabled(False)
149
-
167
+
150
168
  # Get parameters
151
169
  method = self.method_combo.currentText().lower()
152
170
  if method == "t-sne":
153
171
  method = "tsne"
154
172
  n_components = 2 if self.dimensions_combo.currentText() == "2D" else 3
155
-
173
+
156
174
  # Run dimensionality reduction in background thread
157
- self.visualization_thread = VisualizationThread(
158
- data["embeddings"],
159
- method,
160
- n_components
161
- )
175
+ self.visualization_thread = VisualizationThread(data["embeddings"], method, n_components)
162
176
  self.visualization_thread.finished.connect(self._on_reduction_finished)
163
177
  self.visualization_thread.error.connect(self._on_reduction_error)
164
178
  # Show loading during reduction
165
179
  self.loading_dialog.show_loading("Reducing dimensions...")
166
180
  QApplication.processEvents()
167
181
  self.visualization_thread.start()
168
-
182
+
169
183
  def _on_reduction_finished(self, reduced_data: Any):
170
184
  """Handle dimensionality reduction completion."""
171
185
  self.loading_dialog.hide_loading()
172
186
  self.reduced_data = reduced_data
173
187
  self._create_plot()
174
188
  self.generate_button.setEnabled(True)
189
+ self.open_browser_button.setEnabled(True)
175
190
  self.status_label.setText("Visualization complete")
176
-
191
+
177
192
  def _on_reduction_error(self, error_msg: str):
178
193
  """Handle dimensionality reduction error."""
179
194
  self.loading_dialog.hide_loading()
180
- print(f"Error: Visualization failed: {error_msg}")
195
+ log_error("Visualization failed: %s", error_msg)
181
196
  QMessageBox.warning(self, "Error", f"Visualization failed: {error_msg}")
182
197
  self.generate_button.setEnabled(True)
183
198
  self.status_label.setText("Visualization failed")
184
-
199
+
185
200
  def _create_plot(self):
186
201
  """Create plotly visualization."""
187
202
  if self.reduced_data is None or self.current_data is None:
188
203
  return
189
-
204
+
190
205
  # Lazy import plotly
191
206
  from vector_inspector.utils.lazy_imports import get_plotly
207
+
192
208
  go = get_plotly()
193
-
209
+
194
210
  ids = self.current_data.get("ids", [])
195
211
  documents = self.current_data.get("documents", [])
196
- metadatas = self.current_data.get("metadatas", [])
197
-
212
+
198
213
  # Prepare hover text
199
214
  hover_texts = []
200
- for i, (id_val, doc) in enumerate(zip(ids, documents)):
215
+ for _, (id_val, doc) in enumerate(zip(ids, documents, strict=True)):
201
216
  doc_preview = str(doc)[:100] if doc else "No document"
202
217
  hover_texts.append(f"ID: {id_val}<br>Doc: {doc_preview}")
203
-
218
+
204
219
  # Create plot
205
220
  if self.reduced_data.shape[1] == 2:
206
221
  # 2D plot
207
- fig = go.Figure(data=[
208
- go.Scatter(
209
- x=self.reduced_data[:, 0],
210
- y=self.reduced_data[:, 1],
211
- mode='markers',
212
- marker=dict(
213
- size=8,
214
- color=list(range(len(ids))),
215
- colorscale='Viridis',
216
- showscale=True
217
- ),
218
- text=hover_texts,
219
- hoverinfo='text'
220
- )
221
- ])
222
-
222
+ fig = go.Figure(
223
+ data=[
224
+ go.Scatter(
225
+ x=self.reduced_data[:, 0],
226
+ y=self.reduced_data[:, 1],
227
+ mode="markers",
228
+ marker={
229
+ "size": 8,
230
+ "color": list(range(len(ids))),
231
+ "colorscale": "Viridis",
232
+ "showscale": True,
233
+ },
234
+ text=hover_texts,
235
+ hoverinfo="text",
236
+ )
237
+ ]
238
+ )
239
+
223
240
  fig.update_layout(
224
241
  title=f"Vector Visualization - {self.method_combo.currentText()}",
225
242
  xaxis_title="Component 1",
226
243
  yaxis_title="Component 2",
227
- hovermode='closest',
244
+ hovermode="closest",
228
245
  height=800,
229
- width=1200
246
+ width=1200,
230
247
  )
231
248
  else:
232
249
  # 3D plot
233
- fig = go.Figure(data=[
234
- go.Scatter3d(
235
- x=self.reduced_data[:, 0],
236
- y=self.reduced_data[:, 1],
237
- z=self.reduced_data[:, 2],
238
- mode='markers',
239
- marker=dict(
240
- size=5,
241
- color=list(range(len(ids))),
242
- colorscale='Viridis',
243
- showscale=True
244
- ),
245
- text=hover_texts,
246
- hoverinfo='text'
247
- )
248
- ])
249
-
250
+ fig = go.Figure(
251
+ data=[
252
+ go.Scatter3d(
253
+ x=self.reduced_data[:, 0],
254
+ y=self.reduced_data[:, 1],
255
+ z=self.reduced_data[:, 2],
256
+ mode="markers",
257
+ marker={
258
+ "size": 5,
259
+ "color": list(range(len(ids))),
260
+ "colorscale": "Viridis",
261
+ "showscale": True,
262
+ },
263
+ text=hover_texts,
264
+ hoverinfo="text",
265
+ )
266
+ ]
267
+ )
250
268
  fig.update_layout(
251
269
  title=f"Vector Visualization - {self.method_combo.currentText()}",
252
- scene=dict(
253
- xaxis_title="Component 1",
254
- yaxis_title="Component 2",
255
- zaxis_title="Component 3"
256
- ),
270
+ scene={
271
+ "xaxis_title": "Component 1",
272
+ "yaxis_title": "Component 2",
273
+ "zaxis_title": "Component 3",
274
+ },
257
275
  height=800,
258
- width=1200
276
+ width=1200,
259
277
  )
260
-
278
+
261
279
  # Display in embedded web view
262
- html = fig.to_html(include_plotlyjs='cdn')
280
+ html = fig.to_html(include_plotlyjs="cdn")
263
281
  self.web_view.setHtml(html)
282
+
283
+ # Save temp HTML file for browser
284
+ import tempfile
285
+
286
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".html") as temp_file:
287
+ temp_file.write(html.encode("utf-8"))
288
+ temp_file.flush()
289
+ self.temp_html_files.append(temp_file.name)
290
+ self._last_temp_html = temp_file.name
291
+
292
+ def _open_in_browser(self):
293
+ import webbrowser
294
+
295
+ if hasattr(self, "_last_temp_html") and self._last_temp_html:
296
+ webbrowser.open(f"file://{self._last_temp_html}")
297
+
298
+ def cleanup_temp_html(self):
299
+ import os
300
+ import contextlib
301
+
302
+ for f in getattr(self, "temp_html_files", []):
303
+ with contextlib.suppress(Exception):
304
+ os.remove(f)
305
+ self.temp_html_files = []
306
+ self._last_temp_html = None
@@ -0,0 +1,5 @@
1
+ APP_VERSION = "0.3.3" # Update this when pyproject.toml version changes
2
+
3
+
4
+ def get_app_version():
5
+ return APP_VERSION
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vector-inspector
3
- Version: 0.3.2
3
+ Version: 0.3.4
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
@@ -8,7 +8,7 @@ Project-URL: Homepage, https://vector-inspector.divinedevops.com
8
8
  Project-URL: Source, https://github.com/anthonypdawson/vector-inspector
9
9
  Project-URL: Issues, https://github.com/anthonypdawson/vector-inspector/issues
10
10
  Project-URL: Documentation, https://github.com/anthonypdawson/vector-inspector#readme
11
- Requires-Python: <3.13,>=3.10
11
+ Requires-Python: <3.14,>=3.10
12
12
  Requires-Dist: chromadb>=0.4.22
13
13
  Requires-Dist: qdrant-client>=1.7.0
14
14
  Requires-Dist: pyside6>=6.6.0
@@ -24,8 +24,16 @@ Requires-Dist: pyarrow>=14.0.0
24
24
  Requires-Dist: pinecone>=8.0.0
25
25
  Requires-Dist: keyring>=25.7.0
26
26
  Requires-Dist: hf-xet>=1.2.0
27
+ Requires-Dist: pymilvus>=2.6.6
28
+ Requires-Dist: lancedb>=0.27.0
27
29
  Description-Content-Type: text/markdown
28
30
 
31
+ - Added and tested support for python 3.13
32
+ - Miscellaneous documentation updates and fixes
33
+ - Splash screen now shows after main window is visible
34
+
35
+ ---
36
+
29
37
 
30
38
  # Vector Inspector
31
39
 
@@ -1,35 +1,40 @@
1
- vector_inspector-0.3.2.dist-info/METADATA,sha256=kz8gjTnsg_1C32Djt2vuBOlMw0amQig093L8sBEBdFI,10232
2
- vector_inspector-0.3.2.dist-info/WHEEL,sha256=tsUv_t7BDeJeRHaSrczbGeuK-TtDpGsWi_JfpzD255I,90
3
- vector_inspector-0.3.2.dist-info/entry_points.txt,sha256=u96envMI2NFImZUJDFutiiWl7ZoHrrev9joAgtyvTxo,80
1
+ vector_inspector-0.3.4.dist-info/METADATA,sha256=663hjPfWaZ38FXq0CQ-b6fxuA6_Hn5-WRAWtYGZUN1Y,10446
2
+ vector_inspector-0.3.4.dist-info/WHEEL,sha256=tsUv_t7BDeJeRHaSrczbGeuK-TtDpGsWi_JfpzD255I,90
3
+ vector_inspector-0.3.4.dist-info/entry_points.txt,sha256=u96envMI2NFImZUJDFutiiWl7ZoHrrev9joAgtyvTxo,80
4
4
  vector_inspector/__init__.py,sha256=Q8XbXn98o0eliQWPePhy-aGUz2KNnVg7bQq-sBPl7zQ,119
5
5
  vector_inspector/__main__.py,sha256=Vdhw8YA1K3wPMlbJQYL5WqvRzAKVeZ16mZQFO9VRmCo,62
6
6
  vector_inspector/config/__init__.py,sha256=vHkVsXSUdInsfzWSOLPZzaaELa3SGenAgfpY5EYbsYA,95
7
7
  vector_inspector/config/known_embedding_models.json,sha256=tnTWI3OvdL2z0YreL_iBzbceIXR69NDj-0tBcEV6NVM,15701
8
8
  vector_inspector/core/__init__.py,sha256=hjOqiJwF1P0rXjiOKhK4qDTvBY7G3m4kq8taH-gKrFM,57
9
9
  vector_inspector/core/cache_manager.py,sha256=cHdbIYR-eS9vLLTqvq4Xejyi5Z7Fm9DqMhb_PMZjnjY,5695
10
- vector_inspector/core/connection_manager.py,sha256=WwiVedHWTfqIuJKV7D52bYEupmpnnSPKcgG1odJCJjs,10003
10
+ vector_inspector/core/connection_manager.py,sha256=xNmgSXqJcMC-iaOY33-Xnfxq4QjUN4CuwppPjzhn3DY,9958
11
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
12
+ vector_inspector/core/connections/base_connection.py,sha256=0KiBd1tGtKYwHootnLWdCNxEfWou13KKCQMYyG-hEKE,8686
13
+ vector_inspector/core/connections/chroma_connection.py,sha256=-W_v7_9FjRWPGDdr5jE7k-r4FHfsmGi-wy-Nddj06_I,19741
14
+ vector_inspector/core/connections/pinecone_connection.py,sha256=Cl-AdNxxwEH3W7lMPW1WiY0Ro7CIuwT-cRDsMNO-Cm4,25648
15
+ vector_inspector/core/connections/qdrant_connection.py,sha256=WX0m78ffypM-m4TRq4304UjiLdDwlN3mOWLFy4wd-Yw,30915
16
+ vector_inspector/core/connections/qdrant_helpers/__init__.py,sha256=u2YNjiW4sbNtqhTNOQr4hmOFqirlNlllsyBK2gWs9eU,262
17
+ vector_inspector/core/connections/qdrant_helpers/qdrant_embedding_resolver.py,sha256=9lQrVnjIDH2YyMMZwHdAtcSeWhNwUDrmMkFik3xWvGU,1547
18
+ vector_inspector/core/connections/qdrant_helpers/qdrant_filter_builder.py,sha256=WebqoWXuejaRUhpNTrEqf2JPG3BRQGhkz1HG82jBqLc,2514
19
+ vector_inspector/core/connections/template_connection.py,sha256=oBlmb2rzorfVOKVkSmQvM0_4DX2MtoO1NqTOV-QdRlA,10235
17
20
  vector_inspector/core/embedding_providers/__init__.py,sha256=anorFsmLVrdK6bHP8YcPZF9DQTIJ9CEnrmJRnqOzWdc,440
18
21
  vector_inspector/core/embedding_providers/base_provider.py,sha256=SqQFoE6lmmxCdns6ce36_x5Ucivvo5jSp8HEbzs7kLw,3933
19
22
  vector_inspector/core/embedding_providers/clip_provider.py,sha256=vvFqoQZNB0PsFJxvDsoDf8-L_z61CrYROFT9IGt7nIE,9088
20
23
  vector_inspector/core/embedding_providers/provider_factory.py,sha256=aMoF9NEslTg_4f3QlIr-v0fXg0rb1zNfmavnPVczNy0,5973
21
24
  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/core/embedding_utils.py,sha256=9ux2B7AO5Q3iKYNrhSCaTRB82hedOxq9VNgBZfXBos8,5522
26
+ vector_inspector/core/logging.py,sha256=HQ6_OZgZmaS3OMFOTAqc0oRbZujqo1W0w8OU4viXP1g,845
27
+ vector_inspector/core/model_registry.py,sha256=fdofceD3iyNpECVC7djTEAaDYgHX_7JQ3ROh5A0plpY,6269
28
+ vector_inspector/main.py,sha256=iZeMPH94q6Ma92hWQLJ7on3rwxytUoS0V8n9MkAuEaY,595
25
29
  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
30
+ vector_inspector/services/backup_helpers.py,sha256=aX1ONFegERq6dpoNM1eJrbyE1gWCV3SuUHMyPpnxrYM,2005
31
+ vector_inspector/services/backup_restore_service.py,sha256=bxwRyxXFMeotfWOXEUfNzTguyEA73byXyIeNMCCW5GE,7415
32
+ vector_inspector/services/credential_service.py,sha256=Ui4JzivQ5YCytQYsKdzpLs5nZcBtWiaQAOEzhZzpEeE,4089
28
33
  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
34
+ vector_inspector/services/import_export_service.py,sha256=4NOfAa6ZyvMyj5cDM4xu0Wqx0pgnK3cCNBGo3E6j4LE,10200
35
+ vector_inspector/services/profile_service.py,sha256=AMeC6XOfI6Qumi0bKlTbqU-czMcle0rrHYK68ceK5r8,12856
36
+ vector_inspector/services/settings_service.py,sha256=YfuPK4VIn7Kd36dpGsgzLAJw3fGybopDUcHhR30GSaY,7692
37
+ vector_inspector/services/visualization_service.py,sha256=9TOK1S1u1U74wLpF5NdDiryyrjOzFnvE8kwjugf95Wk,4208
33
38
  vector_inspector/ui/__init__.py,sha256=262ZiXO6Luk8vZnhCIoYxOtGiny0bXK-BTKjxUNBx-w,43
34
39
  vector_inspector/ui/components/__init__.py,sha256=S-GWU1P820dJ6mHmeeBEy-CGF9fjpBeNf8vrbhRlFMk,30
35
40
  vector_inspector/ui/components/backup_restore_dialog.py,sha256=CrZ2u8vXzggv3aBkYR4FulpY74oZWMLW5BHU4dMiWug,13073
@@ -38,18 +43,20 @@ vector_inspector/ui/components/filter_builder.py,sha256=NSR_hp-rzUZVAca6dIJhTxZA
38
43
  vector_inspector/ui/components/item_dialog.py,sha256=VMwehEjQ6xrdxWygR9J-hHsLfzOVb_E3ePUGYO_c7XA,3951
39
44
  vector_inspector/ui/components/loading_dialog.py,sha256=YEKYGU-R-Zz4CjXSArJtkNxgTy4O9hI5Bbt6qlIzD8U,1018
40
45
  vector_inspector/ui/components/profile_manager_panel.py,sha256=3CzJrY2pjzV8LAgJb0bLOKzK4Buy8v5P8rFqJfrXdRs,20966
46
+ vector_inspector/ui/components/splash_window.py,sha256=lnCdva1fys0BQ1k_rEIQuWjQYXdhGZOf8zRweG2VdyM,1904
41
47
  vector_inspector/ui/dialogs/__init__.py,sha256=xtT77L91PFfm3zHYRENHkWHJaKPm1htuUzRXAF53P8w,211
42
- vector_inspector/ui/dialogs/cross_db_migration.py,sha256=KGtlewzA83Xwkl0J1TUYUhiccYIXbRuNxHO59kNP_tI,15783
48
+ vector_inspector/ui/dialogs/cross_db_migration.py,sha256=BaUyic8l5Ywwql2hQyxVrCXHMjGtqerNAQHDYxcbQ54,15872
43
49
  vector_inspector/ui/dialogs/embedding_config_dialog.py,sha256=Pm6UBHmkcof3x1xXLiGLiMP6jLBcJvsPfY6df5jTtK4,13037
44
50
  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
51
+ vector_inspector/ui/main_window.py,sha256=F78ipCW--VLSCGFWROTxBmabg9UN368zKE4CDtgV_CA,26802
46
52
  vector_inspector/ui/views/__init__.py,sha256=FeMtVzSbVFBMjdwLQSQqD0FRW4ieJ4ZKXtTBci2e_bw,30
47
53
  vector_inspector/ui/views/collection_browser.py,sha256=oG9_YGPoVuMs-f_zSd4EcITmEU9caxvwuubsFUrNf-c,3991
48
54
  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=xpGyyIeIkZ9DmZVO0S1w_NVGE-HY73Czg1lkUZIsL9I,9855
55
+ vector_inspector/ui/views/info_panel.py,sha256=EzEXijiVGdTTC5o1QePgyap5oZ_bkbBoTS4W1nuFvQ8,26087
56
+ vector_inspector/ui/views/metadata_view.py,sha256=mFjgmUwPAq1J2Koje860EidnUq448WdJ6Jt8F-_mVhg,30616
57
+ vector_inspector/ui/views/search_view.py,sha256=LFGmbyVoB04bE6KX-Gt-WYmFrFfnMy808iHWiWVH-gU,12291
58
+ vector_inspector/ui/views/visualization_view.py,sha256=wgkSkOM-ShOHDj1GCUtKnqH87Io5vYtiOdubGV5rN44,11050
53
59
  vector_inspector/utils/__init__.py,sha256=jhHBQC8C8bfhNlf6CAt07ejjStp_YAyleaYr2dm0Dk0,38
54
60
  vector_inspector/utils/lazy_imports.py,sha256=2XZ3ZnwTvZ5vvrh36nJ_TUjwwkgjoAED6i6P9yctvt0,1211
55
- vector_inspector-0.3.2.dist-info/RECORD,,
61
+ vector_inspector/utils/version.py,sha256=wFhZKqblnXu2pyXkg9pCOsUhFNOgTxEKS5fQZxXDQYk,121
62
+ vector_inspector-0.3.4.dist-info/RECORD,,