fc / apps /automation /api /main_api.py
jun2024's picture
Upload 2241 files
b4f2238 verified
Raw History Blame Contribute Delete
3.33 kB
"""
主要API模块
集成所有工具的API接口
"""
from typing import Any
from ninja import File, Router
from ninja.files import UploadedFile
from apps.automation.schemas import OllamaChatIn, OllamaChatOut
from apps.core.infrastructure.throttling import rate_limit_from_settings
from .performance_monitor_api import router as performance_router
router = Router(tags=["Main API"])
def _get_ai_service() -> Any:
from apps.core.dependencies.automation_adapters import build_ai_service
return build_ai_service()
def _get_document_processor_service() -> Any:
from apps.core.dependencies.automation_adapters import build_document_processing_service
return build_document_processing_service()
def _get_config_service() -> Any:
from apps.core.dependencies.automation_adapters import build_automation_config_service
return build_automation_config_service()
# 添加性能监控子路由
router.add_router("/performance", performance_router)
# ============================================================================
# AI集成API
# ============================================================================
@router.post("/ai/ollama", response=OllamaChatOut)
def ai_ollama(request: Any, payload: OllamaChatIn) -> OllamaChatOut:
"""Ollama AI接口"""
# 使用工厂函数获取服务
service = _get_ai_service()
# 调用服务处理Ollama聊天
result = service.chat_with_ollama(model=payload.model, prompt=payload.prompt, text=payload.text)
return OllamaChatOut(data=result)
# ============================================================================
# 通用工具API
# ============================================================================
@router.post("/file/upload", response=dict)
@rate_limit_from_settings("UPLOAD")
def upload_file(
request: Any,
file: UploadedFile = File(...), # type: ignore[arg-type]
limit: int | None = None,
preview_page: int | None = None,
) -> dict[str, Any]:
"""通用文件上传和预处理API"""
# 使用工厂函数获取服务
service = _get_document_processor_service()
# 调用服务处理文件上传
result = service.process_uploaded_file(uploaded_file=file, limit=limit, preview_page=preview_page)
return {
"success": result.success,
"file_info": result.file_info,
"extraction": result.extraction,
"processing_params": result.processing_params,
"error": result.error,
}
# ============================================================================
# 配置和状态API
# ============================================================================
@router.get("/config")
@rate_limit_from_settings("ADMIN")
def get_config(request: Any) -> Any:
"""获取当前配置信息"""
from apps.core.security.admin_access import ensure_admin_request
ensure_admin_request(request)
# 使用工厂函数获取服务
service = _get_config_service()
# 调用服务获取配置信息
config = service.get_automation_config()
return config
@router.get("/status")
def get_status(request: Any) -> Any:
"""获取系统状态"""
# 使用工厂函数获取服务
service = _get_config_service()
# 调用服务获取系统状态
status = service.get_system_status()
return status