Pinecone adapter for rag_control
Project description
Pinecone Adapter for rag_control
A production-ready Pinecone vector database adapter that integrates with rag_control for secure, governed RAG (Retrieval-Augmented Generation) applications.
Overview
The Pinecone adapter implements the rag_control.adapters.VectorStore interface, enabling seamless integration of Pinecone's vector similarity search with rag_control's governance and access control framework. This enables:
- Semantic Search: Vector similarity-based retrieval from Pinecone
- Metadata Filtering: Rich filtering support with AND/OR logic
- Access Control: Per-user namespace isolation via user context
- Governance: Full compliance with rag_control's security and audit framework
- Error Handling: Graceful error management with detailed diagnostics
Installation
Install the package via pip:
pip install pinecone-adapter
Or using uv:
uv pip install pinecone-adapter
Requirements
- Python >= 3.10
pinecone >= 3.0.0rag-control == 0.2.0
Quick Start
1. Initialize the Adapter
from pinecone_adapter import PineconeVectorStoreAdapter
adapter = PineconeVectorStoreAdapter(
api_key="your-pinecone-api-key",
index_name="your-index-name",
embedding_model="text-embedding-3-small"
)
Integration with rag_control
Complete RAG Pipeline Example
from pinecone_adapter import PineconeVectorStoreAdapter
from rag_control import RAGControl
from rag_control.models import UserContext
# 1. Initialize adapters
vector_store = PineconeVectorStoreAdapter(
api_key="your-pinecone-api-key",
index_name="documents",
embedding_model="text-embedding-3-small"
)
# Import or implement your embedding and LLM adapters
from your_embedding_provider import OpenAIEmbeddingAdapter
from your_llm_provider import OpenAIAdapter
query_embedding = OpenAIEmbeddingAdapter(
api_key="your-openai-api-key",
model="text-embedding-3-small"
)
llm = OpenAIAdapter(
api_key="your-openai-api-key",
model="gpt-4"
)
# 2. Configure rag_control - : Load from YAML
rag_control = RAGControl(
llm=llm,
query_embedding=query_embedding,
vector_store=vector_store,
config_path="rag_control_config.yaml"
)
# 3. Run a query
user_context = UserContext(
user_id="user123",
org_id="org456",
attributes={"namespace": "department-finance"}
)
response = rag_control.run(
query="What are our Q1 financial results?",
user_context=user_context
)
print(response.response.text)
print(f"Retrieved {response.retrieved_count} documents")
print(f"Policy applied: {response.policy_name}")
Streaming Responses
# Stream responses for real-time output
stream_response = rag_control.stream(
query="What are our Q1 financial results?",
user_context=user_context
)
# Response includes enforcement metadata
print(f"Enforcement attached: {stream_response.enforcement_attached}")
for chunk in stream_response.response:
print(chunk.text, end="", flush=True)
Metadata Filtering
The adapter supports all rag_control filter operators:
| Operator | Description |
|---|---|
equals |
Exact value match |
in |
Value in list |
lt |
Less than |
lte |
Less than or equal |
gt |
Greater than |
gte |
Greater than or equal |
exists |
Field exists |
intersects |
Array intersection (approximated as in) |
The selected filter is applied based on the org's document_policy.filter_name.
YAML Configuration File
For production deployments, use YAML config files:
# rag_control_config.yaml
orgs:
- org_id: org456
document_policy:
filter_name: published
top_k: 10
default_policy: default
policy_rules: []
filters:
- name: published
condition:
field: status
operator: equals
value: published
- name: finance_2024
and:
- condition:
field: department
operator: equals
value: finance
- condition:
field: year
operator: gte
value: 2024
policies:
- name: default
generation:
temperature: 0.7
filter_name: finance_2024
enforcement:
max_output_tokens: 2048
Namespace Isolation
Use user_context.attributes["namespace"] to isolate results per user or tenant:
# Different users see different results
user_context_1 = UserContext(
user_id="user1",
org_id="org456",
attributes={"namespace": "user1"}
)
user_context_2 = UserContext(
user_id="user2",
org_id="org456",
attributes={"namespace": "user2"}
)
response_1 = adapter.search(embedding=query_embedding, user_context=user_context_1)
response_2 = adapter.search(embedding=query_embedding, user_context=user_context_2)
If no namespace is specified, the search defaults to an empty namespace (all documents).
API Reference
PineconeVectorStoreAdapter
Constructor
PineconeVectorStoreAdapter(
api_key: str,
index_name: str,
embedding_model: str
)
Parameters:
api_key: Pinecone API keyindex_name: Name of Pinecone index to queryembedding_model: Embedding model identifier (e.g., "text-embedding-3-small")
Raises:
VectorStoreAdapterError: If index doesn't exist or API key is invalid
embedding_model Property
model: str = adapter.embedding_model
Returns the embedding model identifier. Must match the embedding model in your query embedding adapter.
search() Method
response = adapter.search(
embedding: list[float],
top_k: int = 5,
user_context: UserContext | None = None,
filter: Filter | None = None
) -> VectorStoreSearchResponse
Parameters:
embedding: Query embedding vectortop_k: Number of results (default: 5). In rag_control, controlled by org'sdocument_policy.top_kuser_context: User context with org_id, user_id, and optional attributesfilter: Metadata filter. In rag_control, provided by filter registry
Returns:
VectorStoreSearchResponsewith:records: List ofVectorStoreRecordobjectsmetadata:VectorStoreSearchMetadatawith latency, provider, etc.
Raises:
VectorStoreAdapterError: If search fails
Error Handling
from rag_control.exceptions import VectorStoreAdapterError
try:
response = adapter.search(embedding=query_embedding)
except VectorStoreAdapterError as e:
print(f"Search failed: {e}")
Development
See DEVELOPMENT.md for setup, testing, and contribution guidelines.
Quick start:
make venv
source .venv/bin/activate
make install-dev
make test
Contributing
Contributions are welcome! See CONTRIBUTING.md for guidelines.
License
Licensed under the Apache License, Version 2.0. See LICENSE for details.
Support
For issues, questions, or feature requests:
- Open a GitHub issue
- Contact: support@retrievallabs.com
Related Resources
- rag_control - RAG governance framework
- Pinecone Documentation
- Pinecone Python Client
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pinecone_adapter-0.1.3.tar.gz.
File metadata
- Download URL: pinecone_adapter-0.1.3.tar.gz
- Upload date:
- Size: 20.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
035725d49b20ca3f6d25321b1fea3c768b703fe508fe1d1f448a1008b26f559a
|
|
| MD5 |
51a46b81a05ac4667a152d4c13950a5b
|
|
| BLAKE2b-256 |
25d028c1076528808675bc4c38bd83defa6848f1fccff89f446c48a2470ee41d
|
File details
Details for the file pinecone_adapter-0.1.3-py3-none-any.whl.
File metadata
- Download URL: pinecone_adapter-0.1.3-py3-none-any.whl
- Upload date:
- Size: 15.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b932c826d9648f8230dd10b7ff758681ead22b6451a3663015ac01fefb12a5d1
|
|
| MD5 |
d68883dd09093094e693988096ae8608
|
|
| BLAKE2b-256 |
d43054a869778b39d0635973a6327b1b60146f2f3ce3489ae3de0f0ec7038e95
|