Spaces:
Sleeping
Sleeping
| """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 | |