vector-inspector 0.3.2__py3-none-any.whl → 0.3.3__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.
- vector_inspector/core/connection_manager.py +55 -49
- vector_inspector/core/connections/base_connection.py +41 -41
- vector_inspector/core/connections/chroma_connection.py +110 -86
- vector_inspector/core/connections/pinecone_connection.py +168 -182
- vector_inspector/core/connections/qdrant_connection.py +109 -126
- vector_inspector/core/connections/qdrant_helpers/__init__.py +4 -0
- vector_inspector/core/connections/qdrant_helpers/qdrant_embedding_resolver.py +35 -0
- vector_inspector/core/connections/qdrant_helpers/qdrant_filter_builder.py +51 -0
- vector_inspector/core/connections/template_connection.py +55 -65
- vector_inspector/core/embedding_utils.py +32 -32
- vector_inspector/core/logging.py +27 -0
- vector_inspector/core/model_registry.py +4 -3
- vector_inspector/main.py +6 -2
- vector_inspector/services/backup_helpers.py +63 -0
- vector_inspector/services/backup_restore_service.py +73 -152
- vector_inspector/services/credential_service.py +33 -40
- vector_inspector/services/import_export_service.py +70 -67
- vector_inspector/services/profile_service.py +92 -94
- vector_inspector/services/settings_service.py +68 -48
- vector_inspector/services/visualization_service.py +40 -39
- vector_inspector/ui/components/splash_window.py +57 -0
- vector_inspector/ui/dialogs/cross_db_migration.py +6 -5
- vector_inspector/ui/main_window.py +200 -146
- vector_inspector/ui/views/info_panel.py +208 -127
- vector_inspector/ui/views/metadata_view.py +8 -7
- vector_inspector/ui/views/search_view.py +97 -75
- vector_inspector/ui/views/visualization_view.py +140 -97
- vector_inspector/utils/version.py +5 -0
- {vector_inspector-0.3.2.dist-info → vector_inspector-0.3.3.dist-info}/METADATA +3 -1
- {vector_inspector-0.3.2.dist-info → vector_inspector-0.3.3.dist-info}/RECORD +32 -25
- {vector_inspector-0.3.2.dist-info → vector_inspector-0.3.3.dist-info}/WHEEL +0 -0
- {vector_inspector-0.3.2.dist-info → vector_inspector-0.3.3.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
|
|
4
|
+
from typing import Any
|
|
5
5
|
import traceback
|
|
6
6
|
from PySide6.QtWidgets import (
|
|
7
|
-
QWidget,
|
|
8
|
-
|
|
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
|
|
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:
|
|
56
|
-
self.reduced_data:
|
|
57
|
-
self.visualization_thread:
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
197
|
-
|
|
212
|
+
|
|
198
213
|
# Prepare hover text
|
|
199
214
|
hover_texts = []
|
|
200
|
-
for
|
|
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(
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
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=
|
|
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(
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
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=
|
|
253
|
-
xaxis_title
|
|
254
|
-
yaxis_title
|
|
255
|
-
zaxis_title
|
|
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=
|
|
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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: vector-inspector
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.3
|
|
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
|
|
@@ -24,6 +24,8 @@ 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
|
|
|
29
31
|
|
|
@@ -1,35 +1,40 @@
|
|
|
1
|
-
vector_inspector-0.3.
|
|
2
|
-
vector_inspector-0.3.
|
|
3
|
-
vector_inspector-0.3.
|
|
1
|
+
vector_inspector-0.3.3.dist-info/METADATA,sha256=MvwRtqmv3IGGx_J5SWQCAGt-wlZ3JP8uAjtBRTwl4tI,10294
|
|
2
|
+
vector_inspector-0.3.3.dist-info/WHEEL,sha256=tsUv_t7BDeJeRHaSrczbGeuK-TtDpGsWi_JfpzD255I,90
|
|
3
|
+
vector_inspector-0.3.3.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=
|
|
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=
|
|
13
|
-
vector_inspector/core/connections/chroma_connection.py,sha256
|
|
14
|
-
vector_inspector/core/connections/pinecone_connection.py,sha256=
|
|
15
|
-
vector_inspector/core/connections/qdrant_connection.py,sha256=
|
|
16
|
-
vector_inspector/core/connections/
|
|
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=
|
|
23
|
-
vector_inspector/core/
|
|
24
|
-
vector_inspector/
|
|
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/
|
|
27
|
-
vector_inspector/services/
|
|
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=
|
|
30
|
-
vector_inspector/services/profile_service.py,sha256=
|
|
31
|
-
vector_inspector/services/settings_service.py,sha256=
|
|
32
|
-
vector_inspector/services/visualization_service.py,sha256=
|
|
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=
|
|
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
|
|
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=
|
|
50
|
-
vector_inspector/ui/views/metadata_view.py,sha256=
|
|
51
|
-
vector_inspector/ui/views/search_view.py,sha256=
|
|
52
|
-
vector_inspector/ui/views/visualization_view.py,sha256=
|
|
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
|
|
61
|
+
vector_inspector/utils/version.py,sha256=wFhZKqblnXu2pyXkg9pCOsUhFNOgTxEKS5fQZxXDQYk,121
|
|
62
|
+
vector_inspector-0.3.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|