| """Shared service initialization for FastAPI and Gradio.""" |
|
|
| from __future__ import annotations |
|
|
| import logging |
| from typing import Optional |
|
|
| from db.chat_store import ChatStore |
| from db.faiss_client import FaissDB |
| from models.embedder import MiniCPMEmbedder |
| from models.llm import MiniCPMLLM |
| from models.ocr import MiniCPMVOCR |
| from services.chart_extractor import ChartExtractorService |
| from services.ingestion import IngestionService |
| from services.qa import QAService |
| from services.summarizer import SummarizerService |
|
|
| logger = logging.getLogger(__name__) |
|
|
| _embedder: Optional[MiniCPMEmbedder] = None |
| _llm: Optional[MiniCPMLLM] = None |
| _ocr: Optional[MiniCPMVOCR] = None |
| _db: Optional[FaissDB] = None |
| _chat_store: Optional[ChatStore] = None |
| _ingestion: Optional[IngestionService] = None |
| _qa: Optional[QAService] = None |
| _summarizer: Optional[SummarizerService] = None |
| _chart_extractor: Optional[ChartExtractorService] = None |
|
|
|
|
| def init_services() -> None: |
| """Initialize all backend services (call once at startup).""" |
| global _embedder, _llm, _ocr, _db, _chat_store |
| global _ingestion, _qa, _summarizer, _chart_extractor |
|
|
| logger.info("Initializing FinSight services…") |
| _embedder = MiniCPMEmbedder() |
| _llm = MiniCPMLLM() |
| _ocr = MiniCPMVOCR() |
| _db = FaissDB() |
| _chat_store = ChatStore() |
| _chat_store.init_db() |
| _ingestion = IngestionService(_embedder, _ocr, _db) |
| _qa = QAService(_embedder, _llm, _db) |
| _summarizer = SummarizerService(_llm, _db) |
| _chart_extractor = ChartExtractorService(_ocr) |
| logger.info("FinSight services ready.") |
|
|
|
|
| def shutdown_services() -> None: |
| """Release resources (FAISS index flush, etc.).""" |
| global _db |
| if _db is not None: |
| _db.close() |
| _db = None |
| logger.info("FinSight services shut down.") |
|
|
|
|
| def get_embedder() -> MiniCPMEmbedder: |
| assert _embedder is not None, "Services not initialized" |
| return _embedder |
|
|
|
|
| def get_llm() -> MiniCPMLLM: |
| assert _llm is not None, "Services not initialized" |
| return _llm |
|
|
|
|
| def get_ocr() -> MiniCPMVOCR: |
| assert _ocr is not None, "Services not initialized" |
| return _ocr |
|
|
|
|
| def get_db() -> FaissDB: |
| assert _db is not None, "Services not initialized" |
| return _db |
|
|
|
|
| def get_chat_store() -> ChatStore: |
| assert _chat_store is not None, "Services not initialized" |
| return _chat_store |
|
|
|
|
| def get_ingestion_service() -> IngestionService: |
| assert _ingestion is not None, "Services not initialized" |
| return _ingestion |
|
|
|
|
| def get_qa_service() -> QAService: |
| assert _qa is not None, "Services not initialized" |
| return _qa |
|
|
|
|
| def get_summarizer_service() -> SummarizerService: |
| assert _summarizer is not None, "Services not initialized" |
| return _summarizer |
|
|
|
|
| def get_chart_extractor_service() -> ChartExtractorService: |
| assert _chart_extractor is not None, "Services not initialized" |
| return _chart_extractor |
|
|