mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 17:30:23 +08:00
refactor: 重构异步任务系统和计费服务架构
- 重构任务系统:新增 lifecycle (TaskStatus/BillingStatus)、context、application 模块 - 将 video tasks 泛化为 async tasks,支持更通用的异步任务管理 - 新增 Gemini Files 管理模块和管理界面 - 重构 billing 服务:拆分 schema.py 和 service.py - 新增 candidate 服务模块用于请求候选管理 - 数据库迁移:添加 billing_status、request_id、gemini_file_mappings 表和索引 - 移除废弃的 video_telemetry、task orchestrator 等模块
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
from src.core.modules.base import ModuleDefinition
|
||||
|
||||
# 导入所有模块定义
|
||||
from src.modules.gemini_files import gemini_files_module
|
||||
from src.modules.ldap import ldap_module
|
||||
from src.modules.oauth import oauth_module
|
||||
|
||||
@@ -14,6 +15,7 @@ from src.modules.oauth import oauth_module
|
||||
ALL_MODULES: list[ModuleDefinition] = [
|
||||
ldap_module,
|
||||
oauth_module,
|
||||
gemini_files_module,
|
||||
]
|
||||
|
||||
__all__ = ["ALL_MODULES"]
|
||||
|
||||
96
src/modules/gemini_files/__init__.py
Normal file
96
src/modules/gemini_files/__init__.py
Normal file
@@ -0,0 +1,96 @@
|
||||
"""
|
||||
Gemini Files 文件管理模块
|
||||
|
||||
提供 Gemini Files API 文件上传和管理功能:
|
||||
- 文件上传到 Google Gemini Files API
|
||||
- 文件映射管理(file_id → key_id)
|
||||
- 文件列表查看和删除
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING, Any
|
||||
|
||||
from src.core.modules.base import (
|
||||
ModuleCategory,
|
||||
ModuleDefinition,
|
||||
ModuleHealth,
|
||||
ModuleMetadata,
|
||||
)
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
|
||||
def _get_router() -> Any:
|
||||
"""延迟导入路由"""
|
||||
from src.api.admin.gemini_files import router
|
||||
|
||||
return router
|
||||
|
||||
|
||||
async def _health_check() -> ModuleHealth:
|
||||
"""健康检查"""
|
||||
# 检查是否有可用的 gemini_files 能力的 Key
|
||||
from src.database import create_session
|
||||
from src.models.database import ProviderAPIKey
|
||||
|
||||
db = create_session()
|
||||
try:
|
||||
# 查找有 gemini_files 能力的 Key
|
||||
keys = db.query(ProviderAPIKey).filter(ProviderAPIKey.is_active.is_(True)).all()
|
||||
has_capable_key = any(
|
||||
key.capabilities and key.capabilities.get("gemini_files", False) for key in keys
|
||||
)
|
||||
if has_capable_key:
|
||||
return ModuleHealth.HEALTHY
|
||||
return ModuleHealth.DEGRADED
|
||||
except Exception:
|
||||
return ModuleHealth.UNKNOWN
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
def _validate_config(db: Session) -> tuple[bool, str]:
|
||||
"""
|
||||
验证 Gemini Files 模块配置
|
||||
|
||||
检查项:
|
||||
1. 至少有一个有 gemini_files 能力的 Provider Key
|
||||
"""
|
||||
from src.models.database import ProviderAPIKey
|
||||
|
||||
# 查找有 gemini_files 能力的 Key
|
||||
keys = db.query(ProviderAPIKey).filter(ProviderAPIKey.is_active.is_(True)).all()
|
||||
capable_keys = [
|
||||
key for key in keys if key.capabilities and key.capabilities.get("gemini_files", False)
|
||||
]
|
||||
|
||||
if not capable_keys:
|
||||
return (
|
||||
False,
|
||||
"至少启用一个具有「Gemini 文件 API」能力的 Key",
|
||||
)
|
||||
|
||||
return True, ""
|
||||
|
||||
|
||||
gemini_files_module = ModuleDefinition(
|
||||
metadata=ModuleMetadata(
|
||||
name="gemini_files",
|
||||
display_name="文件缓存",
|
||||
description="管理 Gemini Files API 上传的文件,支持文件上传、查看和删除",
|
||||
category=ModuleCategory.INTEGRATION,
|
||||
env_key="GEMINI_FILES_AVAILABLE",
|
||||
default_available=True,
|
||||
required_packages=[],
|
||||
api_prefix="/api/admin/gemini-files",
|
||||
admin_route="/admin/gemini-files",
|
||||
admin_menu_icon="FileUp",
|
||||
admin_menu_group="system",
|
||||
admin_menu_order=60,
|
||||
),
|
||||
router_factory=_get_router,
|
||||
health_check=_health_check,
|
||||
validate_config=_validate_config,
|
||||
)
|
||||
Reference in New Issue
Block a user