File size: 1,617 Bytes
454f118
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
"""
app/rag_engine.py
==================
Shared cached resource loaders for all Streamlit pages.
Import from here instead of app.main to avoid page_config conflicts.
"""
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from config.settings import settings

import streamlit as st


@st.cache_resource(show_spinner="Loading embedding model (first time ~30s)...")
def load_embedder():
    from src.embeddings.embedder import Embedder
    return Embedder()


@st.cache_resource(show_spinner="Connecting to vector store...")
def load_retriever():
    from src.retrieval.hybrid_retriever import HybridRetriever
    from src.vectorstore.qdrant_store import QdrantStore
    from src.vectorstore.bm25_index import BM25Index
    qdrant = QdrantStore()
    bm25 = BM25Index()
    embedder = load_embedder()
    return HybridRetriever(qdrant_store=qdrant, bm25_index=bm25, embedder=embedder)


@st.cache_resource(show_spinner="Loading reranker model...")
def load_reranker():
    from src.retrieval.reranker import Reranker
    return Reranker()


@st.cache_resource
def load_groq():
    from src.generation.groq_client import GroqClient
    return GroqClient()


@st.cache_resource
def load_comparator():
    from src.comparison.company_comparator import CompanyComparator
    return CompanyComparator(
        retriever=load_retriever(),
        reranker=load_reranker(),
        groq_client=load_groq(),
    )


@st.cache_resource
def load_metric_extractor():
    from src.metrics.metric_extractor import MetricExtractor
    return MetricExtractor(groq_client=load_groq())