2ND
This commit is contained in:
@@ -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,
|
||||
|
Reference in New Issue
Block a user