@molecule/api-ai-vector-store-pinecone
v1.0.1
Published
Pinecone vector store provider for molecule.dev — serverless vector similarity search
Maintainers
Readme
@molecule/api-ai-vector-store-pinecone
Auto-generated, AI-first package reference for the molecule.dev ecosystem. It is written to be read by coding agents as much as by people, and is generated from this package's source — edit
src/index.tsJSDoc, not this file.
Pinecone vector store provider for molecule.dev.
Maps molecule collections to Pinecone serverless indexes, providing similarity search, metadata filtering, and batch upsert operations.
Quick Start
import { setProvider, requireProvider } from '@molecule/api-ai-vector-store'
import { provider } from '@molecule/api-ai-vector-store-pinecone'
setProvider(provider) // at startup — lazy; reads PINECONE_API_KEY on first use
// or pass explicit config: setProvider(createProvider({ apiKey }))Type
provider
Installation
npm install @molecule/api-ai-vector-store-pinecone @molecule/api-ai-vector-store @pinecone-database/pineconeAPI
Interfaces
PineconeConfig
Configuration for the Pinecone vector store provider.
interface PineconeConfig {
/** Pinecone API key. Falls back to `PINECONE_API_KEY` env var. */
apiKey?: string
/** Cloud provider for serverless indexes. Defaults to `'aws'`. */
cloud?: 'aws' | 'gcp' | 'azure'
/** Cloud region for serverless indexes. Defaults to `'us-east-1'`. */
region?: string
/** Prefix for Pinecone index names (collections map to indexes). Defaults to `'mol-'`. */
indexPrefix?: string
/** Default distance metric for new collections. Defaults to `'cosine'`. */
defaultMetric?: DistanceMetric
/** Whether to wait for index readiness after creation. Defaults to `true`. */
waitUntilReady?: boolean
}Functions
createProvider(config)
Creates a Pinecone vector store provider instance.
function createProvider(config?: PineconeConfig): AIVectorStoreProviderconfig— Pinecone configuration.
Returns: An AIVectorStoreProvider backed by Pinecone.
Constants
provider
The provider implementation.
const provider: AIVectorStoreProviderCore Interface
Implements @molecule/api-ai-vector-store interface.
Bond Wiring
Setup function to register this provider with the core interface:
import { setProvider } from '@molecule/api-ai-vector-store'
import { provider } from '@molecule/api-ai-vector-store-pinecone'
export function setupAiVectorStorePinecone(): void {
setProvider(provider)
}Injection Notes
Requirements
Peer dependencies:
@molecule/api-ai-vector-store>=1.0.1
Environment Variables
PINECONE_API_KEY(required) — Pinecone API key- Setup: Create an API key in the Pinecone console (API Keys page).
- Get it here: https://app.pinecone.io/
- Example:
pcsk_...
Runtime Dependencies
@molecule/api-ai-vector-store@pinecone-database/pineconeConfig:
PINECONE_API_KEY(required, SERVER-side only) — the Pinecone SDK throws at construction time when it is missing. The exportedprovideris a lazy proxy, so this fires on first use, NOT at import time;createProvider()throws eagerly.Collections are serverless indexes created on demand (name prefix
mol-) inconfig.cloud/config.region(defaultsaws/us-east-1— set these for other regions; existing indexes are never moved). WithwaitUntilReady(defaulttrue)createCollectionblocks until the index is live, which can take ~a minute — create collections at startup/provisioning time, not inside request handlers.
E2E Tests
Integration checklist — drive the real flow (no mocks): upsert real
vectors, run real query calls, and verify through the FEATURE this store
powers (semantic search / RAG retrieval / related-items) plus direct property
checks on the returned VectorSearchResult[]. Adapt each item to this app's
actual corpus/screens and check every box off. A box you can't check is an
integration bug to fix — not a skip:
- [ ]
upsertrecords (each with a stableid+metadata), thenquerywith an embedding: results come back ranked byscore(highest first), the semantically closest stored item is result #1 and unrelated items rank lower — the whole point.scoreis a sane similarity (bounded, ~0–1, higher = closer) and each hit'srecord.id/record.metadatacome back intact. - [ ]
topKis honored: a query withtopK: kreturns AT MOST k results, best-first — never more, never unordered. - [ ] Metadata
filterworks: aquerycarrying aMetadataFilter(e.g.{ field: 'userId', operator: 'eq', value }) returns only records matching the filter and never leaks non-matching ones. - [ ] Collection/namespace ISOLATION: a
queryscoped to onecollectionnever returns another collection's vectors — the multi-tenant boundary that keeps one user's private docs out of another's results. Confirm with two collections (or two owner ids) that a scoped query returns only its own. - [ ]
deleteremoves a record: afterdelete({ collection, ids })the vector stops appearing inqueryresults (andfetchomits it). - [ ] The feature built on the store returns MEANING-ranked results
end-to-end in the UI — a semantic-search / RAG / related-items query
surfaces the relevant items first, not a keyword or insertion-order match.
This store does NOT embed text itself, so confirm it composes with
@molecule/api-ai-embeddings(query text → embedding →query). - [ ] Every
upsert/queryruns SERVER-SIDE — the provider/store key stays on the server and never ships in the browser bundle (the package is server-only; a client import throws by design).
