testtest123's picture
Initial commit: Multimodal RAG Pipeline V3.0 with Fallback Logic
2ecc4a7
Raw
History Blame Contribute Delete
1.66 kB
from .base import BaseRAGTechnique
from ..services.cache_service import cache_service
from .hybrid_search import HybridSearch
from typing import List, Dict, Any
class CacheIncrementalRAG(BaseRAGTechnique):
async def run(self, query: str, document_id: str, top_k: int = 5, **kwargs) -> Dict[str, Any]:
technique_name = kwargs.get("underlying_technique", "hybrid")
# 1. Cache Check
await self.emit("CACHE_CHECK", "#6B7280", "Checking Redis cache for previous answer...")
cached_result = cache_service.get(self.user_id, document_id, query, technique_name)
if cached_result:
await self.emit("CACHE_HIT", "#22C55E", "Cache hit! Returning stored answer (0ms).")
return cached_result
await self.emit("CACHE_MISS", "#8B5CF6", "Cache miss. Running full RAG pipeline...")
# 2. Run Underlying Technique (e.g., Hybrid)
# For simplicity, we use Hybrid as the default fallback
underlying = HybridSearch(self.job_id, self.user_id)
result = await underlying.run(query, document_id, top_k)
# 3. Store in Cache
cache_service.set(self.user_id, document_id, query, technique_name, result)
await self.emit("DONE", "#22C55E", "Answer cached for future queries.")
return result
async def retrieve(self, query: str, document_id: str, top_k: int, **kwargs) -> List[Dict[str, Any]]:
# Not used directly in Run override
pass
async def generate(self, query: str, chunks: List[Dict[str, Any]]) -> str:
# Not used directly in Run override
pass