@@ -4,110 +4,7 @@ This guide covers advanced configuration patterns, performance optimization, cus
44
55## Advanced Factory Patterns
66
7- ### Multi-Environment Factory
87
9- Create factories that adapt to different environments:
10-
11- ``` python
12- # my_vectorstores.py
13- import os
14- from langchain_core.embeddings import Embeddings
15- from langchain_redis import Redis as LangchainRedis
16- from langchain_chroma import Chroma
17- from langchain_pinecone import PineconeVectorStore
18-
19- def create_adaptive_vectorstore (embeddings : Embeddings) -> VectorStore:
20- """ Dynamically choose vectorstore based on environment."""
21-
22- environment = os.getenv(" ENVIRONMENT" , " development" )
23-
24- if environment == " production" :
25- # Use Pinecone for production
26- return PineconeVectorStore(
27- index_name = os.getenv(" PINECONE_INDEX_NAME" ),
28- embedding = embeddings,
29- api_key = os.getenv(" PINECONE_API_KEY" ),
30- environment = os.getenv(" PINECONE_ENVIRONMENT" )
31- )
32- elif environment == " staging" :
33- # Use Redis for staging
34- return LangchainRedis(
35- redis_url = os.getenv(" REDIS_URL" ),
36- index_name = " staging_memories" ,
37- embeddings = embeddings
38- )
39- else :
40- # Use Chroma for development
41- return Chroma(
42- persist_directory = " ./dev_chroma_data" ,
43- collection_name = " dev_memories" ,
44- embedding_function = embeddings
45- )
46- ```
47-
48- ### High-Availability Factory
49-
50- Create factories with resilience and failover capabilities:
51-
52- ``` python
53- # resilient_factory.py
54- import os
55- from langchain_core.embeddings import Embeddings
56- from langchain_core.vectorstores import VectorStore
57-
58- def create_resilient_vectorstore (embeddings : Embeddings) -> VectorStore:
59- """ Create vectorstore with built-in resilience patterns."""
60-
61- # Try multiple backends in order of preference
62- backend_preferences = [
63- (" redis" , _create_redis_backend),
64- (" chroma" , _create_chroma_backend),
65- (" memory" , _create_memory_backend) # Fallback to in-memory
66- ]
67-
68- last_error = None
69- for backend_name, factory_func in backend_preferences:
70- try :
71- vectorstore = factory_func(embeddings)
72- print (f " Successfully initialized { backend_name} vectorstore " )
73- return vectorstore
74- except Exception as e:
75- print (f " Failed to initialize { backend_name} : { e} " )
76- last_error = e
77- continue
78-
79- raise Exception (f " All vectorstore backends failed. Last error: { last_error} " )
80-
81- def _create_redis_backend (embeddings : Embeddings) -> VectorStore:
82- """ Try Redis with connection validation."""
83- from langchain_redis import Redis as LangchainRedis
84-
85- vectorstore = LangchainRedis(
86- redis_url = os.getenv(" REDIS_URL" , " redis://localhost:6379" ),
87- index_name = " resilient_memories" ,
88- embeddings = embeddings
89- )
90-
91- # Validate connection
92- vectorstore.client.ping()
93- return vectorstore
94-
95- def _create_chroma_backend (embeddings : Embeddings) -> VectorStore:
96- """ Fallback to Chroma."""
97- from langchain_chroma import Chroma
98-
99- return Chroma(
100- persist_directory = os.getenv(" BACKUP_PERSIST_DIR" , " ./backup_chroma" ),
101- collection_name = " backup_memories" ,
102- embedding_function = embeddings
103- )
104-
105- def _create_memory_backend (embeddings : Embeddings) -> VectorStore:
106- """ Final fallback to in-memory store."""
107- from langchain_core.vectorstores import InMemoryVectorStore
108-
109- return InMemoryVectorStore(embeddings)
110- ```
1118
1129### Multi-Backend Hybrid Factory
11310
@@ -616,17 +513,17 @@ class VectorStoreMigrator:
616513 return await self .import_memories(memories, batch_size)
617514
618515# Usage example
619- async def migrate_redis_to_pinecone ():
620- """ Example: Migrate from Redis to Pinecone ."""
516+ async def migrate_pinecone_to_redis ():
517+ """ Example: Migrate from Pinecone to Redis ."""
621518
622- # Source (Redis )
519+ # Source (Pinecone )
623520 source_client = MemoryAPIClient(
624- base_url = " http://localhost:8000" , # Current Redis setup
521+ base_url = " http://localhost:8000" , # Current Pinecone setup
625522 )
626523
627- # Target (Pinecone ) - Temporarily switch backend
524+ # Target (Redis ) - New Redis-based setup
628525 target_client = MemoryAPIClient(
629- base_url = " http://localhost:8001" , # New Pinecone setup
526+ base_url = " http://localhost:8001" , # New Redis setup
630527 )
631528
632529 migrator = VectorStoreMigrator(source_client, target_client)
@@ -637,7 +534,7 @@ async def migrate_redis_to_pinecone():
637534
638535 # Option 2: File-based migration (safer for large datasets)
639536 await migrator.export_to_file(" memory_export.json" )
640- # ... Stop old server, start new server with Pinecone backend ...
537+ # ... Stop old server, start new server with Redis backend ...
641538 imported = await migrator.import_from_file(" memory_export.json" )
642539 print (f " Imported { imported} memories from file " )
643540```
0 commit comments