File size: 861 Bytes
fd8dc28
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""应用级单例 (LLM, embedder, vector store, etc.) 的获取与生命周期.

被 main.py lifespan 和各 router 复用. 保持依赖注入简单, 不引入 DI 框架.
"""
from __future__ import annotations

import logging
from typing import TYPE_CHECKING

from app.config import settings
from app.llm.base import AbstractLLM

if TYPE_CHECKING:
    from app.services.persist import persist_status

logger = logging.getLogger(__name__)


def get_llm() -> AbstractLLM:
    """从工厂取 LLM 单例. 失败时抛出 LLMUnavailableError."""
    from app.llm.factory import get_llm as _factory_get_llm
    return _factory_get_llm()


async def close_llm() -> None:
    from app.llm.factory import close_llm as _factory_close
    await _factory_close()


def persist_status() -> dict:
    from app.services.persist import persist_status as _ps
    return _ps()