Atlas / docs /architecture /current-system-design.md
findEthics
feat: add comprehensive search optimization and ChromaDB caching system
4b28fb0
|
Raw
History Blame Contribute Delete
6.83 kB

Current System Architecture

Request Flow Diagram

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   User Request  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
          β”‚
          β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  FastAPI        β”‚
β”‚  Chat Endpoint  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
          β”‚
          β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Extract Search  β”‚
β”‚ Terms (NLP)     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
          β”‚
          β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Phase 1:        │◄──►│ Phase 2:        β”‚
β”‚ Rule-Based      β”‚    β”‚ AI-Enhanced     β”‚
β”‚ Decision        β”‚    β”‚ Decision        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
          β”‚
          β–Ό
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚Search?  │──────────── No ────────────┐
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                            β”‚
          β”‚ Yes                            β”‚
          β–Ό                                β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                       β”‚
β”‚ Phase 3:        β”‚                       β”‚
β”‚ Universal Cache β”‚                       β”‚
β”‚ Check           β”‚                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜                       β”‚
          β”‚                                β”‚
          β–Ό                                β”‚
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”                           β”‚
    β”‚Cache    │──── Hit ──┐               β”‚
    β”‚Hit?     β”‚           β”‚               β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜           β”‚               β”‚
          β”‚ Miss          β”‚               β”‚
          β–Ό               β”‚               β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”‚               β”‚
β”‚ Web Search      β”‚       β”‚               β”‚
β”‚ Combined        β”‚       β”‚               β”‚
β”‚ (Brave+DDG)     β”‚       β”‚               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜       β”‚               β”‚
          β”‚               β”‚               β”‚
          β–Ό               β”‚               β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”‚               β”‚
β”‚ Store in Cache  β”‚       β”‚               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜       β”‚               β”‚
          β”‚               β”‚               β”‚
          β–Ό               β”‚               β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”‚               β”‚
β”‚ Format Results  β”‚β—„β”€β”€β”€β”€β”€β”€β”˜               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜                       β”‚
          β”‚                                β”‚
          β–Ό                                β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β—„β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ AI Response     β”‚
β”‚ Generation      β”‚
β”‚ (Gemini)        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
          β”‚
          β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Analytics       β”‚
β”‚ Tracking        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
          β”‚
          β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ JSON Response   β”‚
β”‚ to Client       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Current Cache Implementation

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Universal Search Cache                   β”‚
β”‚                                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚   Hash Table    β”‚    β”‚         Cache Entry             β”‚ β”‚
β”‚  β”‚   (OrderedDict) β”‚    β”‚                                 β”‚ β”‚
β”‚  β”‚                 β”‚    β”‚  β€’ search_results: List[Dict]   β”‚ β”‚
β”‚  β”‚  MD5(terms) ──► │─────  β€’ search_query: str           β”‚ β”‚
β”‚  β”‚                 β”‚    β”‚  β€’ search_terms: List[str]     β”‚ β”‚
β”‚  β”‚                 β”‚    β”‚  β€’ timestamp: float            β”‚ β”‚
β”‚  β”‚                 β”‚    β”‚  β€’ ttl: int                    β”‚ β”‚
β”‚  β”‚                 β”‚    β”‚  β€’ hit_count: int              β”‚ β”‚
β”‚  β”‚                 β”‚    β”‚  β€’ last_accessed: float        β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                             β”‚
β”‚  Lookup Strategy:                                           β”‚
β”‚  1. Exact Match: O(1) hash lookup                          β”‚
β”‚  2. Semantic Search: O(n) spaCy similarity                 β”‚
β”‚                                                             β”‚
β”‚  Max Size: 1000 entries                                    β”‚
β”‚  Default TTL: 3600 seconds                                 β”‚
β”‚  Memory: ~2-10MB per entry                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Performance Characteristics

Operation Time Complexity Typical Duration Resource Usage
Exact Cache Hit O(1) 1-5ΞΌs RAM only
Semantic Cache Search O(n) 10-500ms CPU + RAM
Rule-Based Decision O(1) 50-200ms CPU intensive
AI-Based Decision O(1) 200-500ms Network + GPU
Web Search O(1) 2-5s Network + APIs

Current Limitations

  1. Decision-First Approach: Always runs search decision logic before cache check
  2. Dual Lookup Complexity: Two different cache lookup strategies
  3. Poor Semantic Scaling: O(n) performance degrades with cache size
  4. Memory-Only: Cache lost on server restart
  5. Session Complexity: Removed but left complex patterns in codebase