vector-inspector 0.3.9__tar.gz → 0.3.12__tar.gz
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-0.3.12/LICENSE +1 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/PKG-INFO +19 -37
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/README.md +16 -34
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/pyproject.toml +72 -3
- vector_inspector-0.3.12/src/vector_inspector/__init__.py +12 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/core/connection_manager.py +91 -19
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/core/connections/base_connection.py +43 -43
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/core/connections/chroma_connection.py +1 -1
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/core/connections/pgvector_connection.py +12 -172
- vector_inspector-0.3.12/src/vector_inspector/core/connections/pinecone_connection.py +1275 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/core/connections/qdrant_connection.py +35 -44
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/core/embedding_utils.py +14 -5
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/core/logging.py +3 -1
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/extensions/__init__.py +6 -0
- vector_inspector-0.3.12/src/vector_inspector/extensions/telemetry_settings_panel.py +25 -0
- vector_inspector-0.3.12/src/vector_inspector/main.py +68 -0
- vector_inspector-0.3.12/src/vector_inspector/services/backup_restore_service.py +418 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/services/settings_service.py +79 -19
- vector_inspector-0.3.12/src/vector_inspector/services/telemetry_service.py +88 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/components/backup_restore_dialog.py +215 -101
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/components/connection_manager_panel.py +155 -14
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/dialogs/cross_db_migration.py +126 -99
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/dialogs/settings_dialog.py +13 -6
- vector_inspector-0.3.12/src/vector_inspector/ui/loading_screen.py +169 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/main_window.py +44 -19
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/services/dialog_service.py +1 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/views/collection_browser.py +36 -34
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/views/connection_view.py +7 -1
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/views/info_panel.py +118 -52
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/views/metadata_view.py +30 -31
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/views/search_view.py +20 -19
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/views/visualization_view.py +18 -15
- vector_inspector-0.3.12/tests/test_backup_restore_service.py +213 -0
- vector_inspector-0.3.9/src/vector_inspector/__init__.py +0 -3
- vector_inspector-0.3.9/src/vector_inspector/core/connections/pinecone_connection.py +0 -778
- vector_inspector-0.3.9/src/vector_inspector/main.py +0 -25
- vector_inspector-0.3.9/src/vector_inspector/services/backup_restore_service.py +0 -205
- vector_inspector-0.3.9/tests/test_backup_restore_service.py +0 -97
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/__main__.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/config/__init__.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/config/known_embedding_models.json +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/core/__init__.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/core/cache_manager.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/core/connections/__init__.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/core/connections/qdrant_helpers/__init__.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/core/connections/qdrant_helpers/qdrant_embedding_resolver.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/core/connections/qdrant_helpers/qdrant_filter_builder.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/core/connections/template_connection.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/core/embedding_providers/__init__.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/core/embedding_providers/base_provider.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/core/embedding_providers/clip_provider.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/core/embedding_providers/provider_factory.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/core/embedding_providers/sentence_transformer_provider.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/core/model_registry.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/core/provider_factory.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/services/__init__.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/services/backup_helpers.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/services/credential_service.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/services/filter_service.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/services/import_export_service.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/services/profile_service.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/services/update_service.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/services/visualization_service.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/__init__.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/components/__init__.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/components/filter_builder.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/components/item_dialog.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/components/loading_dialog.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/components/profile_manager_panel.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/components/splash_window.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/components/update_details_dialog.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/controllers/__init__.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/controllers/connection_controller.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/dialogs/__init__.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/dialogs/embedding_config_dialog.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/dialogs/provider_type_dialog.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/main_window_shell.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/services/__init__.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/tabs.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/ui/views/__init__.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/utils/__init__.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/utils/lazy_imports.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/utils/version.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/tests/test_backup_helpers.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/tests/test_chroma_connection.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/tests/test_filter_service.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/tests/test_pgvector_connection.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/tests/test_pinecone_connection.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/tests/test_qdrant_connection.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/tests/test_runner.py +0 -0
- {vector_inspector-0.3.9 → vector_inspector-0.3.12}/tests/test_settings_service.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
All rights reserved. Anthony Dawson
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: vector-inspector
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.12
|
|
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:
|
|
11
|
+
Requires-Python: >=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
|
|
@@ -26,45 +26,19 @@ Requires-Dist: keyring>=25.7.0
|
|
|
26
26
|
Requires-Dist: hf-xet>=1.2.0
|
|
27
27
|
Requires-Dist: pymilvus>=2.6.6
|
|
28
28
|
Requires-Dist: lancedb>=0.27.0
|
|
29
|
-
Requires-Dist: psycopg2>=2.9.11
|
|
29
|
+
Requires-Dist: psycopg2-binary>=2.9.11
|
|
30
30
|
Requires-Dist: pgvector>=0.4.2
|
|
31
31
|
Description-Content-Type: text/markdown
|
|
32
32
|
|
|
33
33
|
# Latest updates
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
|
|
39
|
-
-
|
|
40
|
-
- Added
|
|
41
|
-
|
|
42
|
-
- Settings / Preferences
|
|
43
|
-
- SettingsService persists preferences and exposes typed accessors (breadcrumb, search defaults, auto-embed, window geometry)
|
|
44
|
-
- SettingsService emits a setting_changed Qt signal so UI reacts immediately
|
|
45
|
-
- SettingsDialog (modal) added with add_section API and hook integration for extension panels
|
|
46
|
-
- Breadcrumb controls moved out of core so Pro (Vector Studio) injects them via the settings_panel_hook
|
|
47
|
-
|
|
48
|
-
- Extension hook for settings panels
|
|
49
|
-
- *settings_panel_hook* added to *vector_inspector.extensions*; Vector Studio registers breadcrumb controls at startup
|
|
50
|
-
|
|
51
|
-
- Breadcrumb and UI improvements
|
|
52
|
-
- Breadcrumb label now elides long trails (left/middle) and shows full trail on hover
|
|
53
|
-
- SearchView supports runtime elide-mode changes and responds to settings signals
|
|
54
|
-
|
|
55
|
-
- Window geometry persistence
|
|
56
|
-
- Main window saves/restores geometry when window.restore_geometry is enabled
|
|
57
|
-
|
|
58
|
-
- Pro (Vector Studio) features
|
|
59
|
-
- *Search Similar* (Pro): right-click any row in Data Browser or Search Results to run a vector-to-vector similarity search
|
|
60
|
-
- *table_context_menu* handler hardened for many embedding/id formats and includes fallbacks
|
|
61
|
-
- Vector Studio injects breadcrumb controls into Settings dialog via *settings_panel_hook*
|
|
62
|
-
|
|
63
|
-
- Tests and CI
|
|
64
|
-
- Added *tests/test_settings_injection.py* to assert settings panel hook registration
|
|
65
|
-
- Updated context-menu tests to use *log_info* and *assert* for pytest
|
|
66
|
-
- Local test run: 5 tests passed; GUI-heavy suite ~9s due to PySide6 startup
|
|
67
|
-
|
|
35
|
+
## Pinecone Hosted Model Support Improvements
|
|
36
|
+
- Direct Text Search: Added full support for Pinecone indexes with integrated (hosted) embedding models. You can now perform semantic search using plain text queries—no local embedding required.
|
|
37
|
+
- Accurate Model Detection: The app now detects and displays the hosted model name (e.g., llama-text-embed-v2) in the info panel for Pinecone indexes.
|
|
38
|
+
- Robust Query Handling: The search logic now uses Pinecone’s search() API for hosted models, with correct response parsing and error handling.
|
|
39
|
+
- Future-Proof: Retained the ability to generate embeddings via Pinecone’s inference API for future features or advanced workflows.
|
|
40
|
+
- Improved Error Handling: Added better checks and debug logging for Pinecone API responses.
|
|
41
|
+
- These changes make Pinecone integration seamless and future-ready for both text and vector search scenarios.
|
|
68
42
|
---
|
|
69
43
|
|
|
70
44
|
# Vector Inspector
|
|
@@ -72,7 +46,7 @@ Description-Content-Type: text/markdown
|
|
|
72
46
|
> **Disclaimer:** This tool is currently under active development and is **not production ready**. Not all features have been thoroughly tested and code is released frequently. Use with caution in critical or production environments.
|
|
73
47
|
|
|
74
48
|
[](https://github.com/anthonypdawson/vector-inspector/actions/workflows/ci-tests.yml)
|
|
75
|
-
[](https://github.com/anthonypdawson/vector-inspector/actions/workflows/release-and-publish.yml)
|
|
76
50
|
|
|
77
51
|
[](https://pypi.org/project/vector-inspector/)
|
|
78
52
|
[](https://pepy.tech/projects/vector-inspector)
|
|
@@ -80,6 +54,14 @@ Description-Content-Type: text/markdown
|
|
|
80
54
|
|
|
81
55
|
A comprehensive desktop application for visualizing, querying, and managing vector database data. Similar to SQL database viewers, Vector Inspector provides an intuitive GUI for exploring vector embeddings, metadata, and performing similarity searches across multiple vector database providers.
|
|
82
56
|
|
|
57
|
+
<p align="center">
|
|
58
|
+
<a href="site/images/demo.gif" target="_blank">
|
|
59
|
+
<img src="site/images/demo.gif" alt="Vector Inspector Demo" width="600"/>
|
|
60
|
+
</a>
|
|
61
|
+
</p>
|
|
62
|
+
|
|
63
|
+
**Quick Demo:** See Vector Inspector in action!
|
|
64
|
+
|
|
83
65
|
## Overview
|
|
84
66
|
|
|
85
67
|
Vector Inspector bridges the gap between vector databases and user-friendly data exploration tools. While vector databases are powerful for semantic search and AI applications, they often lack the intuitive inspection and management tools that traditional SQL databases have. This project aims to provide that missing layer.
|
|
@@ -1,38 +1,12 @@
|
|
|
1
1
|
# Latest updates
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
-
|
|
5
|
-
-
|
|
6
|
-
|
|
7
|
-
-
|
|
8
|
-
- Added
|
|
9
|
-
|
|
10
|
-
- Settings / Preferences
|
|
11
|
-
- SettingsService persists preferences and exposes typed accessors (breadcrumb, search defaults, auto-embed, window geometry)
|
|
12
|
-
- SettingsService emits a setting_changed Qt signal so UI reacts immediately
|
|
13
|
-
- SettingsDialog (modal) added with add_section API and hook integration for extension panels
|
|
14
|
-
- Breadcrumb controls moved out of core so Pro (Vector Studio) injects them via the settings_panel_hook
|
|
15
|
-
|
|
16
|
-
- Extension hook for settings panels
|
|
17
|
-
- *settings_panel_hook* added to *vector_inspector.extensions*; Vector Studio registers breadcrumb controls at startup
|
|
18
|
-
|
|
19
|
-
- Breadcrumb and UI improvements
|
|
20
|
-
- Breadcrumb label now elides long trails (left/middle) and shows full trail on hover
|
|
21
|
-
- SearchView supports runtime elide-mode changes and responds to settings signals
|
|
22
|
-
|
|
23
|
-
- Window geometry persistence
|
|
24
|
-
- Main window saves/restores geometry when window.restore_geometry is enabled
|
|
25
|
-
|
|
26
|
-
- Pro (Vector Studio) features
|
|
27
|
-
- *Search Similar* (Pro): right-click any row in Data Browser or Search Results to run a vector-to-vector similarity search
|
|
28
|
-
- *table_context_menu* handler hardened for many embedding/id formats and includes fallbacks
|
|
29
|
-
- Vector Studio injects breadcrumb controls into Settings dialog via *settings_panel_hook*
|
|
30
|
-
|
|
31
|
-
- Tests and CI
|
|
32
|
-
- Added *tests/test_settings_injection.py* to assert settings panel hook registration
|
|
33
|
-
- Updated context-menu tests to use *log_info* and *assert* for pytest
|
|
34
|
-
- Local test run: 5 tests passed; GUI-heavy suite ~9s due to PySide6 startup
|
|
35
|
-
|
|
3
|
+
## Pinecone Hosted Model Support Improvements
|
|
4
|
+
- Direct Text Search: Added full support for Pinecone indexes with integrated (hosted) embedding models. You can now perform semantic search using plain text queries—no local embedding required.
|
|
5
|
+
- Accurate Model Detection: The app now detects and displays the hosted model name (e.g., llama-text-embed-v2) in the info panel for Pinecone indexes.
|
|
6
|
+
- Robust Query Handling: The search logic now uses Pinecone’s search() API for hosted models, with correct response parsing and error handling.
|
|
7
|
+
- Future-Proof: Retained the ability to generate embeddings via Pinecone’s inference API for future features or advanced workflows.
|
|
8
|
+
- Improved Error Handling: Added better checks and debug logging for Pinecone API responses.
|
|
9
|
+
- These changes make Pinecone integration seamless and future-ready for both text and vector search scenarios.
|
|
36
10
|
---
|
|
37
11
|
|
|
38
12
|
# Vector Inspector
|
|
@@ -40,7 +14,7 @@
|
|
|
40
14
|
> **Disclaimer:** This tool is currently under active development and is **not production ready**. Not all features have been thoroughly tested and code is released frequently. Use with caution in critical or production environments.
|
|
41
15
|
|
|
42
16
|
[](https://github.com/anthonypdawson/vector-inspector/actions/workflows/ci-tests.yml)
|
|
43
|
-
[](https://github.com/anthonypdawson/vector-inspector/actions/workflows/release-and-publish.yml)
|
|
44
18
|
|
|
45
19
|
[](https://pypi.org/project/vector-inspector/)
|
|
46
20
|
[](https://pepy.tech/projects/vector-inspector)
|
|
@@ -48,6 +22,14 @@
|
|
|
48
22
|
|
|
49
23
|
A comprehensive desktop application for visualizing, querying, and managing vector database data. Similar to SQL database viewers, Vector Inspector provides an intuitive GUI for exploring vector embeddings, metadata, and performing similarity searches across multiple vector database providers.
|
|
50
24
|
|
|
25
|
+
<p align="center">
|
|
26
|
+
<a href="site/images/demo.gif" target="_blank">
|
|
27
|
+
<img src="site/images/demo.gif" alt="Vector Inspector Demo" width="600"/>
|
|
28
|
+
</a>
|
|
29
|
+
</p>
|
|
30
|
+
|
|
31
|
+
**Quick Demo:** See Vector Inspector in action!
|
|
32
|
+
|
|
51
33
|
## Overview
|
|
52
34
|
|
|
53
35
|
Vector Inspector bridges the gap between vector databases and user-friendly data exploration tools. While vector databases are powerful for semantic search and AI applications, they often lack the intuitive inspection and management tools that traditional SQL databases have. This project aims to provide that missing layer.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "vector-inspector"
|
|
3
|
-
version = "0.3.
|
|
3
|
+
version = "0.3.12"
|
|
4
4
|
description = "A comprehensive desktop application for visualizing, querying, and managing vector database data"
|
|
5
5
|
authors = [
|
|
6
6
|
{ name = "Anthony Dawson", email = "anthonypdawson+github@gmail.com" },
|
|
@@ -23,10 +23,10 @@ dependencies = [
|
|
|
23
23
|
"hf-xet>=1.2.0",
|
|
24
24
|
"pymilvus>=2.6.6",
|
|
25
25
|
"lancedb>=0.27.0",
|
|
26
|
-
"psycopg2>=2.9.11",
|
|
26
|
+
"psycopg2-binary>=2.9.11",
|
|
27
27
|
"pgvector>=0.4.2",
|
|
28
28
|
]
|
|
29
|
-
requires-python = ">=3.10
|
|
29
|
+
requires-python = ">=3.10"
|
|
30
30
|
readme = "README.md"
|
|
31
31
|
|
|
32
32
|
[project.license]
|
|
@@ -55,6 +55,10 @@ dev = [
|
|
|
55
55
|
"ruff>=0.14.14",
|
|
56
56
|
"mypy>=1.19.1",
|
|
57
57
|
"ipython>=8.18.0",
|
|
58
|
+
"briefcase>=0.3.26",
|
|
59
|
+
"pyarmor>=9.2.3",
|
|
60
|
+
"bumpver>=2025.1131",
|
|
61
|
+
"pyside6-stubs>=6.7.3.0",
|
|
58
62
|
]
|
|
59
63
|
|
|
60
64
|
[tool.ruff]
|
|
@@ -92,6 +96,7 @@ select = [
|
|
|
92
96
|
ignore = [
|
|
93
97
|
"E501",
|
|
94
98
|
"I001",
|
|
99
|
+
"UP045",
|
|
95
100
|
]
|
|
96
101
|
|
|
97
102
|
[tool.ruff.lint.isort]
|
|
@@ -111,3 +116,67 @@ cmd = "python -m vector_inspector.main"
|
|
|
111
116
|
|
|
112
117
|
[tool.pdm.scripts.vector-inspector.env]
|
|
113
118
|
PYTHONPATH = "src"
|
|
119
|
+
|
|
120
|
+
[tool.briefcase]
|
|
121
|
+
project_name = "Vector Inspector"
|
|
122
|
+
bundle = "com.divinedevops.vector-inspector"
|
|
123
|
+
version = "0.3.12"
|
|
124
|
+
url = "https://vector-inspector.divinedevops.com"
|
|
125
|
+
author = "Anthony Dawson"
|
|
126
|
+
author_email = "anthonypdawson+github@gmail.com"
|
|
127
|
+
|
|
128
|
+
[tool.briefcase.license]
|
|
129
|
+
file = "LICENSE"
|
|
130
|
+
|
|
131
|
+
[tool.briefcase.app.vector-inspector]
|
|
132
|
+
formal_name = "Vector Inspector"
|
|
133
|
+
description = "A comprehensive desktop application for visualizing, querying, and managing vector database data"
|
|
134
|
+
long_description = "More details about the app should go here.\n"
|
|
135
|
+
sources = [
|
|
136
|
+
"src/vector_inspector",
|
|
137
|
+
]
|
|
138
|
+
test_sources = [
|
|
139
|
+
"tests",
|
|
140
|
+
]
|
|
141
|
+
requires = []
|
|
142
|
+
test_requires = []
|
|
143
|
+
|
|
144
|
+
[tool.briefcase.app.vector-inspector.macOS]
|
|
145
|
+
universal_build = true
|
|
146
|
+
requires = []
|
|
147
|
+
|
|
148
|
+
[tool.briefcase.app.vector-inspector.linux]
|
|
149
|
+
requires = []
|
|
150
|
+
|
|
151
|
+
[tool.briefcase.app.vector-inspector.linux.system.debian]
|
|
152
|
+
system_requires = []
|
|
153
|
+
system_runtime_requires = []
|
|
154
|
+
|
|
155
|
+
[tool.briefcase.app.vector-inspector.linux.system.rhel]
|
|
156
|
+
system_requires = []
|
|
157
|
+
system_runtime_requires = []
|
|
158
|
+
|
|
159
|
+
[tool.briefcase.app.vector-inspector.linux.system.suse]
|
|
160
|
+
system_requires = []
|
|
161
|
+
system_runtime_requires = []
|
|
162
|
+
|
|
163
|
+
[tool.briefcase.app.vector-inspector.linux.system.arch]
|
|
164
|
+
system_requires = []
|
|
165
|
+
system_runtime_requires = []
|
|
166
|
+
|
|
167
|
+
[tool.briefcase.app.vector-inspector.linux.flatpak]
|
|
168
|
+
flatpak_runtime = "org.freedesktop.Platform"
|
|
169
|
+
flatpak_runtime_version = "25.08"
|
|
170
|
+
flatpak_sdk = "org.freedesktop.Sdk"
|
|
171
|
+
|
|
172
|
+
[tool.briefcase.app.vector-inspector.windows]
|
|
173
|
+
requires = []
|
|
174
|
+
|
|
175
|
+
[tool.briefcase.app.vector-inspector.iOS]
|
|
176
|
+
requires = []
|
|
177
|
+
|
|
178
|
+
[tool.briefcase.app.vector-inspector.android]
|
|
179
|
+
requires = []
|
|
180
|
+
|
|
181
|
+
[tool.briefcase.app.vector-inspector.web]
|
|
182
|
+
requires = []
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""Vector Inspector - A comprehensive desktop application for vector database visualization."""
|
|
2
|
+
|
|
3
|
+
__version__ = "0.3.12" # Keep in sync with pyproject.toml for dev mode fallback
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def get_version():
|
|
7
|
+
try:
|
|
8
|
+
from importlib.metadata import version, PackageNotFoundError
|
|
9
|
+
|
|
10
|
+
return version("vector-inspector")
|
|
11
|
+
except Exception:
|
|
12
|
+
return __version__
|
{vector_inspector-0.3.9 → vector_inspector-0.3.12}/src/vector_inspector/core/connection_manager.py
RENAMED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
"""Connection manager for handling multiple vector database connections."""
|
|
2
2
|
|
|
3
3
|
import uuid
|
|
4
|
-
from typing import Dict, Optional, List, Any
|
|
5
4
|
from enum import Enum
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
6
7
|
from PySide6.QtCore import QObject, Signal
|
|
7
8
|
|
|
8
|
-
from .connections.base_connection import VectorDBConnection
|
|
9
9
|
from vector_inspector.core.logging import log_error
|
|
10
10
|
|
|
11
|
+
from .connections.base_connection import VectorDBConnection
|
|
12
|
+
|
|
11
13
|
|
|
12
14
|
class ConnectionState(Enum):
|
|
13
15
|
"""Possible connection states."""
|
|
@@ -27,7 +29,7 @@ class ConnectionInstance:
|
|
|
27
29
|
name: str,
|
|
28
30
|
provider: str,
|
|
29
31
|
connection: VectorDBConnection,
|
|
30
|
-
config:
|
|
32
|
+
config: dict[str, Any],
|
|
31
33
|
):
|
|
32
34
|
"""
|
|
33
35
|
Initialize a connection instance.
|
|
@@ -42,12 +44,17 @@ class ConnectionInstance:
|
|
|
42
44
|
self.id = connection_id
|
|
43
45
|
self.name = name
|
|
44
46
|
self.provider = provider
|
|
45
|
-
self.
|
|
47
|
+
self.database = connection
|
|
46
48
|
self.config = config
|
|
47
49
|
self.state = ConnectionState.DISCONNECTED
|
|
48
|
-
self.active_collection:
|
|
49
|
-
self.collections:
|
|
50
|
-
self.error_message:
|
|
50
|
+
self.active_collection: str | None = None
|
|
51
|
+
self.collections: list[str] = []
|
|
52
|
+
self.error_message: str | None = None
|
|
53
|
+
|
|
54
|
+
# Set profile_name on the underlying connection object so it can be used
|
|
55
|
+
# for settings lookups (embedding models, etc.)
|
|
56
|
+
# Note: This dynamically adds an attribute to the connection object
|
|
57
|
+
self.database.profile_name = name # type: ignore[attr-defined]
|
|
51
58
|
|
|
52
59
|
def get_display_name(self) -> str:
|
|
53
60
|
"""Get a display-friendly connection name."""
|
|
@@ -59,6 +66,59 @@ class ConnectionInstance:
|
|
|
59
66
|
return f"{self.name} > {self.active_collection}"
|
|
60
67
|
return self.name
|
|
61
68
|
|
|
69
|
+
def __getattr__(self, name):
|
|
70
|
+
"""Forward unknown attribute lookups to the underlying database connection.
|
|
71
|
+
|
|
72
|
+
This allows `ConnectionInstance` to act as a thin wrapper while
|
|
73
|
+
exposing the provider-specific API (e.g. `get_all_items`,
|
|
74
|
+
`query_collection`) without callers needing to access
|
|
75
|
+
`.database` explicitly.
|
|
76
|
+
"""
|
|
77
|
+
return getattr(self.database, name)
|
|
78
|
+
|
|
79
|
+
# Convenience proxy methods to forward common operations to the underlying
|
|
80
|
+
# VectorDBConnection. This prevents callers from needing to access
|
|
81
|
+
# `instance.database` directly and centralizes error handling.
|
|
82
|
+
def list_collections(self) -> list[str]:
|
|
83
|
+
"""Return list of collections from the underlying database connection.
|
|
84
|
+
|
|
85
|
+
Falls back to the cached `collections` attribute on error.
|
|
86
|
+
"""
|
|
87
|
+
try:
|
|
88
|
+
return self.database.list_collections()
|
|
89
|
+
except Exception:
|
|
90
|
+
return self.collections or []
|
|
91
|
+
|
|
92
|
+
def connect(self) -> bool:
|
|
93
|
+
"""Proxy to connect the underlying database connection."""
|
|
94
|
+
return self.database.connect()
|
|
95
|
+
|
|
96
|
+
def disconnect(self) -> None:
|
|
97
|
+
"""Proxy to disconnect the underlying database connection; logs errors."""
|
|
98
|
+
try:
|
|
99
|
+
self.database.disconnect()
|
|
100
|
+
except Exception as e:
|
|
101
|
+
log_error("Error disconnecting underlying database: %s", e)
|
|
102
|
+
|
|
103
|
+
@property
|
|
104
|
+
def is_connected(self) -> bool:
|
|
105
|
+
"""Whether the underlying database connection is currently connected."""
|
|
106
|
+
return getattr(self.database, "is_connected", False)
|
|
107
|
+
|
|
108
|
+
def get_collection_info(self, collection_name: str):
|
|
109
|
+
"""Proxy to get collection-specific information."""
|
|
110
|
+
try:
|
|
111
|
+
return self.database.get_collection_info(collection_name)
|
|
112
|
+
except Exception:
|
|
113
|
+
return None
|
|
114
|
+
|
|
115
|
+
def delete_collection(self, collection_name: str) -> bool:
|
|
116
|
+
"""Proxy to delete a collection on the underlying database connection."""
|
|
117
|
+
try:
|
|
118
|
+
return self.database.delete_collection(collection_name)
|
|
119
|
+
except Exception:
|
|
120
|
+
return False
|
|
121
|
+
|
|
62
122
|
|
|
63
123
|
class ConnectionManager(QObject):
|
|
64
124
|
"""Manages multiple vector database connections and saved profiles.
|
|
@@ -85,16 +145,28 @@ class ConnectionManager(QObject):
|
|
|
85
145
|
def __init__(self):
|
|
86
146
|
"""Initialize the connection manager."""
|
|
87
147
|
super().__init__()
|
|
88
|
-
self._connections:
|
|
89
|
-
self._active_connection_id:
|
|
148
|
+
self._connections: dict[str, ConnectionInstance] = {}
|
|
149
|
+
self._active_connection_id: str | None = None
|
|
150
|
+
|
|
151
|
+
def get_active_collection(self) -> str | None:
|
|
152
|
+
"""
|
|
153
|
+
Get the active collection name for the currently active connection.
|
|
154
|
+
|
|
155
|
+
Returns:
|
|
156
|
+
The active collection name, or None if no active connection or collection.
|
|
157
|
+
"""
|
|
158
|
+
active_conn = self.get_active_connection()
|
|
159
|
+
if active_conn:
|
|
160
|
+
return active_conn.active_collection
|
|
161
|
+
return None
|
|
90
162
|
|
|
91
163
|
def create_connection(
|
|
92
164
|
self,
|
|
93
165
|
name: str,
|
|
94
166
|
provider: str,
|
|
95
167
|
connection: VectorDBConnection,
|
|
96
|
-
config:
|
|
97
|
-
connection_id: str = None,
|
|
168
|
+
config: dict[str, Any],
|
|
169
|
+
connection_id: str | None = None,
|
|
98
170
|
) -> str:
|
|
99
171
|
"""
|
|
100
172
|
Create a new connection instance (not yet connected).
|
|
@@ -138,17 +210,17 @@ class ConnectionManager(QObject):
|
|
|
138
210
|
if connection_id in self._connections:
|
|
139
211
|
self.connection_opened.emit(connection_id)
|
|
140
212
|
|
|
141
|
-
def get_connection(self, connection_id: str) ->
|
|
213
|
+
def get_connection(self, connection_id: str) -> ConnectionInstance | None:
|
|
142
214
|
"""Get a connection instance by ID."""
|
|
143
215
|
return self._connections.get(connection_id)
|
|
144
216
|
|
|
145
|
-
def get_active_connection(self) ->
|
|
217
|
+
def get_active_connection(self) -> ConnectionInstance | None:
|
|
146
218
|
"""Get the currently active connection instance."""
|
|
147
219
|
if self._active_connection_id:
|
|
148
220
|
return self._connections.get(self._active_connection_id)
|
|
149
221
|
return None
|
|
150
222
|
|
|
151
|
-
def get_active_connection_id(self) ->
|
|
223
|
+
def get_active_connection_id(self) -> str | None:
|
|
152
224
|
"""Get the currently active connection ID."""
|
|
153
225
|
return self._active_connection_id
|
|
154
226
|
|
|
@@ -185,7 +257,7 @@ class ConnectionManager(QObject):
|
|
|
185
257
|
|
|
186
258
|
# Disconnect the connection
|
|
187
259
|
try:
|
|
188
|
-
instance.
|
|
260
|
+
instance.disconnect()
|
|
189
261
|
except Exception as e:
|
|
190
262
|
log_error("Error disconnecting: %s", e)
|
|
191
263
|
|
|
@@ -206,7 +278,7 @@ class ConnectionManager(QObject):
|
|
|
206
278
|
return True
|
|
207
279
|
|
|
208
280
|
def update_connection_state(
|
|
209
|
-
self, connection_id: str, state: ConnectionState, error:
|
|
281
|
+
self, connection_id: str, state: ConnectionState, error: str | None = None
|
|
210
282
|
):
|
|
211
283
|
"""
|
|
212
284
|
Update the state of a connection.
|
|
@@ -225,7 +297,7 @@ class ConnectionManager(QObject):
|
|
|
225
297
|
instance.error_message = None
|
|
226
298
|
self.connection_state_changed.emit(connection_id, state)
|
|
227
299
|
|
|
228
|
-
def update_collections(self, connection_id: str, collections:
|
|
300
|
+
def update_collections(self, connection_id: str, collections: list[str]):
|
|
229
301
|
"""
|
|
230
302
|
Update the collections list for a connection.
|
|
231
303
|
|
|
@@ -238,7 +310,7 @@ class ConnectionManager(QObject):
|
|
|
238
310
|
instance.collections = collections
|
|
239
311
|
self.collections_updated.emit(connection_id, collections)
|
|
240
312
|
|
|
241
|
-
def set_active_collection(self, connection_id: str, collection_name:
|
|
313
|
+
def set_active_collection(self, connection_id: str, collection_name: str | None):
|
|
242
314
|
"""
|
|
243
315
|
Set the active collection for a connection.
|
|
244
316
|
|
|
@@ -251,7 +323,7 @@ class ConnectionManager(QObject):
|
|
|
251
323
|
instance.active_collection = collection_name
|
|
252
324
|
self.active_collection_changed.emit(connection_id, collection_name)
|
|
253
325
|
|
|
254
|
-
def get_all_connections(self) ->
|
|
326
|
+
def get_all_connections(self) -> list[ConnectionInstance]:
|
|
255
327
|
"""Get list of all connection instances."""
|
|
256
328
|
return list(self._connections.values())
|
|
257
329
|
|