vendor_connectors.meshy.persistence.vector_store
vendor_connectors.meshy.persistence.vector_store
Section titled “vendor_connectors.meshy.persistence.vector_store”SQLite vector store for idempotency tracking and RAG embeddings.
This module provides a vector-enabled SQLite database for:
- Idempotency tracking - deduplicate asset generation requests
- RAG embeddings - semantic search over prompts, species, assets
Uses sqlite-vec for vector similarity search, falling back to standard SQLite if vectors aren’t needed.
Usage: from vendor_connectors.meshy.persistence.vector_store import VectorStore
store = VectorStore("assets.db")
# Track asset generationstore.record_generation( spec_hash="abc123", prompt="cute otter character", task_id="meshy-task-id", embedding=get_embedding("cute otter character"),)
# Find similar prompts (RAG)similar = store.search_similar("river otter", limit=5)
# Check idempotencyexisting = store.get_by_spec_hash("abc123")Requirements: pip install mesh-toolkit[vector]
The vector extra includes:- sqlite-vec (vector similarity extension)- Optional: sentence-transformers for embeddingsModule Contents
Section titled “Module Contents”Classes
Section titled “Classes”GenerationRecord | Record of a 3D asset generation. |
|---|---|
SimilarityResult | Result from similarity search. |
VectorStore | SQLite vector store for asset generation tracking and RAG. |
Functions
Section titled “Functions”_utc_now | |
|---|---|
get_embedding | Get embedding for text using sentence-transformers. |
_HAS_VECTOR |
|---|
vendor_connectors.meshy.persistence.vector_store._HAS_VECTOR
Section titled “vendor_connectors.meshy.persistence.vector_store._HAS_VECTOR”False
vendor_connectors.meshy.persistence.vector_store._utc_now() → datetime.datetime
Section titled “vendor_connectors.meshy.persistence.vector_store._utc_now() → datetime.datetime”class vendor_connectors.meshy.persistence.vector_store.GenerationRecord
Section titled “class vendor_connectors.meshy.persistence.vector_store.GenerationRecord”Record of a 3D asset generation.
None
spec_hash : str =
Section titled “spec_hash : str = ”project : str =
Section titled “project : str = ”prompt : str =
Section titled “prompt : str = ”art_style : str
Section titled “art_style : str”‘sculpture’
task_id : str | None
Section titled “task_id : str | None”None
status : str
Section titled “status : str”‘pending’
model_url : str | None
Section titled “model_url : str | None”None
embedding : list[float] | None
Section titled “embedding : list[float] | None”None
metadata : dict[str, Any]
Section titled “metadata : dict[str, Any]”‘field(…)’
‘field(…)’
‘field(…)’
class vendor_connectors.meshy.persistence.vector_store.SimilarityResult
Section titled “class vendor_connectors.meshy.persistence.vector_store.SimilarityResult”Result from similarity search.
record : vendor_connectors.meshy.persistence.vector_store.GenerationRecord
Section titled “record : vendor_connectors.meshy.persistence.vector_store.GenerationRecord”None
distance : float
Section titled “distance : float”None
None
class vendor_connectors.meshy.persistence.vector_store.VectorStore(db_path: str | pathlib.Path = ‘vendor_connectors.meshy.db’, embedding_dim: int = DEFAULT_EMBEDDING_DIM)
Section titled “class vendor_connectors.meshy.persistence.vector_store.VectorStore(db_path: str | pathlib.Path = ‘vendor_connectors.meshy.db’, embedding_dim: int = DEFAULT_EMBEDDING_DIM)”SQLite vector store for asset generation tracking and RAG.
Features:
- Idempotent task tracking by spec_hash
- Vector similarity search for RAG
- Full-text search fallback when vectors unavailable
- Atomic transactions
Args: db_path: Path to SQLite database file embedding_dim: Dimension of embedding vectors (default: 384 for MiniLM)
Initialization
Section titled “Initialization”DEFAULT_EMBEDDING_DIM
Section titled “DEFAULT_EMBEDDING_DIM”384
Get or create database connection.
_transaction() → collections.abc.Iterator[sqlite3.Connection]
Section titled “_transaction() → collections.abc.Iterator[sqlite3.Connection]”Context manager for transactions.
_init_db() → None
Section titled “_init_db() → None”Initialize database schema.
record_generation(spec_hash: str, prompt: str, project: str = ‘default’, art_style: str = ‘sculpture’, task_id: str | None = None, embedding: list[float] | None = None, metadata: dict[str, Any] | None = None) → vendor_connectors.meshy.persistence.vector_store.GenerationRecord
Section titled “record_generation(spec_hash: str, prompt: str, project: str = ‘default’, art_style: str = ‘sculpture’, task_id: str | None = None, embedding: list[float] | None = None, metadata: dict[str, Any] | None = None) → vendor_connectors.meshy.persistence.vector_store.GenerationRecord”Record a new generation (idempotent by spec_hash).
If a record with the same spec_hash exists, returns existing.
Args: spec_hash: Unique hash of the generation spec prompt: Text prompt for generation project: Project identifier art_style: Art style (realistic, sculpture, etc.) task_id: Meshy task ID if already submitted embedding: Optional embedding vector for RAG metadata: Additional metadata dict
Returns: GenerationRecord (existing or newly created)
update_status(spec_hash: str, status: str, task_id: str | None = None, model_url: str | None = None) → bool
Section titled “update_status(spec_hash: str, status: str, task_id: str | None = None, model_url: str | None = None) → bool”Update generation status.
Args: spec_hash: Generation spec hash status: New status task_id: Optional task ID to update model_url: Optional model URL to update
Returns: True if record was updated, False if not found
get_by_spec_hash(spec_hash: str) → vendor_connectors.meshy.persistence.vector_store.GenerationRecord | None
Section titled “get_by_spec_hash(spec_hash: str) → vendor_connectors.meshy.persistence.vector_store.GenerationRecord | None”Get generation record by spec hash.
Args: spec_hash: Generation spec hash
Returns: GenerationRecord or None
get_by_task_id(task_id: str) → vendor_connectors.meshy.persistence.vector_store.GenerationRecord | None
Section titled “get_by_task_id(task_id: str) → vendor_connectors.meshy.persistence.vector_store.GenerationRecord | None”Get generation record by Meshy task ID.
Args: task_id: Meshy task ID
Returns: GenerationRecord or None
search_similar(query_embedding: list[float], limit: int = 10, project: str | None = None) → list[vendor_connectors.meshy.persistence.vector_store.SimilarityResult]
Section titled “search_similar(query_embedding: list[float], limit: int = 10, project: str | None = None) → list[vendor_connectors.meshy.persistence.vector_store.SimilarityResult]”Search for similar generations using vector similarity.
Args: query_embedding: Query embedding vector limit: Maximum results to return project: Optional project filter
Returns: List of SimilarityResult ordered by similarity (highest first)
search_text(query: str, limit: int = 10, project: str | None = None) → list[vendor_connectors.meshy.persistence.vector_store.GenerationRecord]
Section titled “search_text(query: str, limit: int = 10, project: str | None = None) → list[vendor_connectors.meshy.persistence.vector_store.GenerationRecord]”Full-text search for prompts.
Falls back to this when vector search is unavailable.
Args: query: Search query limit: Maximum results project: Optional project filter
Returns: List of matching GenerationRecords
list_pending(project: str | None = None) → list[vendor_connectors.meshy.persistence.vector_store.GenerationRecord]
Section titled “list_pending(project: str | None = None) → list[vendor_connectors.meshy.persistence.vector_store.GenerationRecord]”List all pending/in-progress generations.
Args: project: Optional project filter
Returns: List of pending GenerationRecords
compute_spec_hash(spec: dict[str, Any]) → str
Section titled “compute_spec_hash(spec: dict[str, Any]) → str”Compute deterministic hash for a generation spec.
Args: spec: Generation specification dict
Returns: SHA256 hex digest
_row_to_record(row: sqlite3.Row) → vendor_connectors.meshy.persistence.vector_store.GenerationRecord
Section titled “_row_to_record(row: sqlite3.Row) → vendor_connectors.meshy.persistence.vector_store.GenerationRecord”Convert database row to GenerationRecord.
_serialize_embedding(embedding: list[float]) → bytes
Section titled “_serialize_embedding(embedding: list[float]) → bytes”Serialize embedding to bytes for SQLite vec.
close() → None
Section titled “close() → None”Close database connection.
vendor_connectors.meshy.persistence.vector_store.get_embedding(text: str, model: str = ‘all-MiniLM-L6-v2’) → list[float] | None
Section titled “vendor_connectors.meshy.persistence.vector_store.get_embedding(text: str, model: str = ‘all-MiniLM-L6-v2’) → list[float] | None”Get embedding for text using sentence-transformers.
Args: text: Text to embed model: Model name (default: all-MiniLM-L6-v2)
Returns: Embedding vector or None if sentence-transformers not available