This commit is contained in:
beabigegg
2025-09-02 13:11:48 +08:00
parent a60d965317
commit b11a8272c4
76 changed files with 15321 additions and 200 deletions

View File

@@ -58,16 +58,26 @@ class APIUsageStats(db.Model):
def record_api_call(cls, user_id, job_id, api_endpoint, metadata, response_time_ms, success=True, error_message=None):
"""記錄 API 呼叫統計"""
# 從 Dify API metadata 解析使用量資訊
prompt_tokens = metadata.get('usage', {}).get('prompt_tokens', 0)
completion_tokens = metadata.get('usage', {}).get('completion_tokens', 0)
total_tokens = metadata.get('usage', {}).get('total_tokens', prompt_tokens + completion_tokens)
usage_data = metadata.get('usage', {})
# 計算成本
prompt_unit_price = metadata.get('usage', {}).get('prompt_unit_price', 0.0)
prompt_price_unit = metadata.get('usage', {}).get('prompt_price_unit', 'USD')
prompt_tokens = usage_data.get('prompt_tokens', 0)
completion_tokens = usage_data.get('completion_tokens', 0)
total_tokens = usage_data.get('total_tokens', prompt_tokens + completion_tokens)
# 成本計算:通常是 prompt_tokens * prompt_unit_price
cost = prompt_tokens * float(prompt_unit_price) if prompt_unit_price else 0.0
# 計算成本 - 使用 Dify API 提供的總成本
if 'total_price' in usage_data:
# 直接使用 API 提供的總價格
cost = float(usage_data.get('total_price', 0.0))
else:
# 備用計算方式
prompt_price = float(usage_data.get('prompt_price', 0.0))
completion_price = float(usage_data.get('completion_price', 0.0))
cost = prompt_price + completion_price
# 單價資訊
prompt_unit_price = usage_data.get('prompt_unit_price', 0.0)
completion_unit_price = usage_data.get('completion_unit_price', 0.0)
prompt_price_unit = usage_data.get('currency', 'USD')
stats = cls(
user_id=user_id,