初始化提交
This commit is contained in:
commit
887c1f449e
963 files changed
+166869
No files matched your search
@@ -0,0 +1,97 @@
|
||||
"""
|
||||
元炁 · 魂镜本地推理引擎 — FastAPI 应用入口。
|
||||
|
||||
提供 OpenAI 兼容的 Chat Completions / Embeddings API,以及自定义 Reranker API。
|
||||
所有模型由本地引擎直接加载推理,不依赖外部服务。
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
|
||||
# 抑制进程退出时 multiprocessing 信号量泄漏警告
|
||||
os.environ.setdefault("PYTHONWARNINGS", "ignore::UserWarning")
|
||||
os.environ.setdefault("TOKENIZERS_PARALLELISM", "false")
|
||||
|
||||
import gc
|
||||
import warnings
|
||||
warnings.filterwarnings("ignore", message="resource_tracker:")
|
||||
|
||||
from fastapi import FastAPI
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
|
||||
from src import __version__
|
||||
from src.config import settings
|
||||
from src.engine.embedding import EmbeddingEngine
|
||||
from src.engine.llm import LlamaEngine
|
||||
from src.engine.reranker import RerankerEngine
|
||||
from src.engine.asr import SenseVoiceASREngine
|
||||
from src.endpoints import chat, embeddings, health, rerank, asr
|
||||
from src.utils.logging import logger, setup_logging
|
||||
|
||||
setup_logging(settings.log_level)
|
||||
|
||||
app = FastAPI(
|
||||
title="元炁 · 魂镜本地推理引擎",
|
||||
version=__version__,
|
||||
description="纯 Python 本地推理引擎 — LLM / Embedding / Reranker / ASR / Multimodal",
|
||||
)
|
||||
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=["*"],
|
||||
allow_credentials=True,
|
||||
allow_methods=["*"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
|
||||
# 全局引擎实例
|
||||
llm_engine = LlamaEngine()
|
||||
embedding_engine = EmbeddingEngine()
|
||||
reranker_engine = RerankerEngine()
|
||||
asr_engine = SenseVoiceASREngine()
|
||||
|
||||
|
||||
@app.on_event("startup")
|
||||
async def startup() -> None:
|
||||
logger.info(
|
||||
"元炁启动 | host={} port={} device={} models_dir={}",
|
||||
settings.host,
|
||||
settings.port,
|
||||
settings.device,
|
||||
settings.models_dir_resolved,
|
||||
)
|
||||
# 注入引擎实例到端点模块
|
||||
health.init(llm_engine, embedding_engine, reranker_engine, asr_engine)
|
||||
chat.init(llm_engine)
|
||||
embeddings.init(embedding_engine)
|
||||
rerank.init(reranker_engine)
|
||||
asr.init(asr_engine)
|
||||
|
||||
# 尝试加载模型(不阻塞启动,失败仅告警)
|
||||
if settings.llm_model_path_resolved:
|
||||
await llm_engine.load()
|
||||
if settings.embedding_model or (settings.models_dir_resolved / "FlagModel").exists():
|
||||
await embedding_engine.load()
|
||||
if settings.reranker_model or (settings.models_dir_resolved / "transformers").exists():
|
||||
await reranker_engine.load()
|
||||
if settings.asr_model:
|
||||
await asr_engine.load()
|
||||
|
||||
|
||||
@app.on_event("shutdown")
|
||||
async def shutdown() -> None:
|
||||
await llm_engine.close()
|
||||
await embedding_engine.close()
|
||||
await reranker_engine.close()
|
||||
await asr_engine.close()
|
||||
gc.collect()
|
||||
logger.info("元炁停止")
|
||||
|
||||
|
||||
# 注册路由
|
||||
app.include_router(health.router, tags=["health"])
|
||||
app.include_router(chat.router, prefix="/v1", tags=["chat"])
|
||||
app.include_router(embeddings.router, prefix="/v1", tags=["embeddings"])
|
||||
app.include_router(rerank.router, prefix="/v1", tags=["rerank"])
|
||||
app.include_router(asr.router, prefix="/v1", tags=["asr"])
|
||||
Reference in new issue
Block a user