Files
000-platform/backend/app/models/pricing.py
111 6c6c48cf71
All checks were successful
continuous-integration/drone/push Build is passing
feat: 新增告警、成本、配额、微信模块及缓存服务
- 新增告警模块 (alerts): 告警规则配置与触发
- 新增成本管理模块 (cost): 成本统计与分析
- 新增配额模块 (quota): 配额管理与限制
- 新增微信模块 (wechat): 微信相关功能接口
- 新增缓存服务 (cache): Redis 缓存封装
- 新增请求日志中间件 (request_logger)
- 新增异常处理和链路追踪中间件
- 更新 dashboard 前端展示
- 更新 SDK stats_client 功能
2026-01-24 16:53:47 +08:00

71 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""费用计算相关模型"""
from datetime import datetime
from decimal import Decimal
from sqlalchemy import Column, Integer, String, Text, DECIMAL, SmallInteger, JSON, TIMESTAMP
from ..database import Base
class ModelPricing(Base):
"""模型价格配置表"""
__tablename__ = "platform_model_pricing"
id = Column(Integer, primary_key=True, autoincrement=True)
# 模型标识
model_name = Column(String(100), nullable=False, unique=True) # 模型名称,如 gpt-4, claude-3-opus
provider = Column(String(50)) # 提供商,如 openai, anthropic, 4sapi
display_name = Column(String(100)) # 显示名称
# 价格配置(单位:元/1K tokens
input_price_per_1k = Column(DECIMAL(10, 6), default=0) # 输入价格
output_price_per_1k = Column(DECIMAL(10, 6), default=0) # 输出价格
# 或固定价格(每次调用)
fixed_price_per_call = Column(DECIMAL(10, 6), default=0)
# 计费方式
pricing_type = Column(String(20), default='token') # token / call / hybrid
# 备注
description = Column(Text)
status = Column(SmallInteger, default=1) # 0-禁用 1-启用
created_at = Column(TIMESTAMP, default=datetime.now)
updated_at = Column(TIMESTAMP, default=datetime.now, onupdate=datetime.now)
class TenantBilling(Base):
"""租户账单表(月度汇总)"""
__tablename__ = "platform_tenant_billing"
id = Column(Integer, primary_key=True, autoincrement=True)
tenant_id = Column(String(50), nullable=False, index=True)
billing_month = Column(String(7), nullable=False) # 格式: YYYY-MM
# 使用量统计
total_calls = Column(Integer, default=0) # 总调用次数
total_input_tokens = Column(Integer, default=0) # 总输入token
total_output_tokens = Column(Integer, default=0) # 总输出token
# 费用统计
total_cost = Column(DECIMAL(12, 4), default=0) # 总费用
# 按模型分类的费用明细
cost_by_model = Column(JSON) # {"gpt-4": 10.5, "claude-3": 5.2}
# 按应用分类的费用明细
cost_by_app = Column(JSON) # {"tools": 8.0, "interview": 7.7}
# 状态
status = Column(String(20), default='pending') # pending / confirmed / paid
created_at = Column(TIMESTAMP, default=datetime.now)
updated_at = Column(TIMESTAMP, default=datetime.now, onupdate=datetime.now)
class Config:
# 联合唯一索引
__table_args__ = (
{'mysql_charset': 'utf8mb4'}
)