| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- """
- 开放平台统计和日志数据传输对象定义
- 定义调用统计和费用明细相关API请求和响应的数据结构
- 需求: 11.1, 11.2, 12.1, 12.2
- """
- from datetime import date, datetime
- from decimal import Decimal
- from typing import List, Optional
- from pydantic import BaseModel, ConfigDict, Field
- class TrendItem(BaseModel):
- """趋势数据项
-
- 需求 11.3: 显示调用趋势图,支持按日、周、月切换
- """
- date: str = Field(..., description="日期")
- count: int = Field(..., description="调用次数")
- cost: Decimal = Field(..., description="消费金额")
- class ModelDistItem(BaseModel):
- """模型分布项
-
- 需求 11.4: 显示各模型调用占比饼图
- """
- model_name: str = Field(..., description="模型名称")
- count: int = Field(..., description="调用次数")
- percentage: float = Field(..., description="占比百分比")
- class StatsResponse(BaseModel):
- """统计响应
-
- 需求 11.1: 显示今日调用次数、本月调用次数、总调用次数
- 需求 11.2: 显示今日消费金额、本月消费金额
- """
- today_calls: int = Field(..., description="今日调用次数")
- month_calls: int = Field(..., description="本月调用次数")
- total_calls: int = Field(..., description="总调用次数")
- today_cost: Decimal = Field(..., description="今日消费金额")
- month_cost: Decimal = Field(..., description="本月消费金额")
- trend_data: List[TrendItem] = Field(default_factory=list, description="趋势数据")
- model_distribution: List[ModelDistItem] = Field(default_factory=list, description="模型分布")
- class CallLogQuery(BaseModel):
- """调用日志查询参数
-
- 需求 12.1: 支持按时间范围、模型、API Key进行筛选
- 需求 12.4: 支持分页查询
- """
- start_date: Optional[date] = Field(None, description="开始日期")
- end_date: Optional[date] = Field(None, description="结束日期")
- model_id: Optional[int] = Field(None, description="模型ID")
- api_key_id: Optional[int] = Field(None, description="API Key ID")
- page: int = Field(default=1, ge=1, description="页码")
- page_size: int = Field(default=20, ge=1, le=100, description="每页数量")
- class CallLogResponse(BaseModel):
- """调用日志响应
-
- 需求 12.2: 显示调用时间、模型名称、Token用量(输入/输出)、费用金额、使用的API Key
- """
- id: int
- model_name: str = Field(..., description="模型名称")
- is_local: bool = Field(..., description="是否为本地模型")
- input_tokens: int = Field(..., description="输入Token数")
- output_tokens: int = Field(..., description="输出Token数")
- bill: Decimal = Field(..., description="费用金额")
- status: str = Field(..., description="调用状态")
- api_key_prefix: str = Field(..., description="API Key前缀")
- created_at: datetime = Field(..., description="调用时间")
-
- # 价格信息(用于显示计费明细)
- input_price: Optional[Decimal] = Field(None, description="输入单价(每token)")
- output_price: Optional[Decimal] = Field(None, description="输出单价(每token)")
- model_config = ConfigDict(from_attributes=True)
|