feat: 添加多维度计费系统和视频任务管理功能

计费系统:
- 新增 BillingRule 和 DimensionCollector 数据模型
- 实现 FormulaEngine 安全表达式求值引擎 (AST 白名单)
- 支持 dimension/matrix/tiered/constant 多种维度映射
- BillingRuleService 支持 Provider Model -> GlobalModel 规则回退
- CLI task_type 在计费域自动映射为 chat

视频任务增强:
- 添加 request_metadata 字段记录候选 key 和计费规则快照
- 后台轮询支持并发控制 (Semaphore + 独立 session)
- 任务终态自动写入 Usage 记录并计算成本
- 新增视频任务管理 API 和前端界面

其他改进:
- UsageService 新增 record_usage_with_custom_cost 方法
- StandardizedUsage 支持 dimensions 字段 (兼容 extra)
- 配置新增 BILLING_REQUIRE_RULE 和 BILLING_STRICT_MODE
This commit is contained in:
fawney19
2026-01-31 19:11:25 +08:00
parent dc4bb25cc2
commit 97b15afe7c
30 changed files with 4356 additions and 237 deletions

View File

@@ -8,9 +8,9 @@
from __future__ import annotations
from typing import Any, Callable
import os
from datetime import datetime
from typing import Any, Callable
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from apscheduler.triggers.cron import CronTrigger
@@ -177,6 +177,19 @@ class TaskScheduler:
f"({hours}小时{minutes}分钟后)"
)
def remove_job(self, job_id: str) -> None:
"""
移除指定的定时任务
Args:
job_id: 任务ID
"""
try:
self.scheduler.remove_job(job_id)
logger.info(f"已移除定时任务: {job_id}")
except Exception as e:
logger.warning(f"移除定时任务失败 {job_id}: {e}")
@property
def is_running(self) -> bool:
"""调度器是否在运行"""