video_template_gen/code/save_usage_info.py

124 lines
4.5 KiB
Python
Raw Normal View History

import os
from datetime import datetime
def save_usage_info_to_txt(usage_info, total_duration, money, video_path, video_dir, save_dir="/root/autodl-tmp/video_llm"):
"""
保存API使用情况信息到TXT文件
:param usage_info: API使用情况对象
:param total_duration: API总响应时间
:param money: 费用信息字典
:param video_path: 原视频文件路径
:param save_dir: 保存目录
:return: 保存的文件路径
"""
# 创建保存目录
os.makedirs(save_dir, exist_ok=True)
# 生成文件名(基于视频文件名和时间戳)
video_name = os.path.splitext(os.path.basename(video_path))[0]
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
txt_filename = f"tokens_{video_dir}_{timestamp}.txt"
txt_dir = os.path.join(save_dir, "cost", video_name)
os.makedirs(txt_dir, exist_ok=True)
txt_path = os.path.join(txt_dir, txt_filename)
# 格式化使用情况信息
usage_content = f"""API使用情况统计
=====================================
视频文件: {video_path}
统计时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
=====================================
📊 使用情况详情:
{usage_info}
时间统计:
- API总响应时间: {total_duration:.2f}
💰 费用统计:
- 输出费用: ${money.get('output_momey', 0):.6f}
- 提示词费用: ${money.get('prompt_momey', 0):.6f}
- 视频费用: ${money.get('video_momey', 0):.6f}
- 音频费用: ${money.get('audio_momey', 0):.6f}
- 总费用: ${money.get('sum_momey', 0):.6f}
📈 Token统计:
- 总输入Token: {usage_info.total_tokens if hasattr(usage_info, 'total_tokens') else 'N/A'}
- 提示词Token: {usage_info.prompt_tokens if hasattr(usage_info, 'prompt_tokens') else 'N/A'}
- 输出Token: {usage_info.completion_tokens if hasattr(usage_info, 'completion_tokens') else 'N/A'}
🔍 详细Token信息:
- 文本Token: {usage_info.prompt_tokens_details.text_tokens if hasattr(usage_info.prompt_tokens_details, 'text_tokens') else 'N/A'}
- 视频Token: {usage_info.prompt_tokens_details.video_tokens if hasattr(usage_info.prompt_tokens_details, 'video_tokens') else 'N/A'}
- 音频Token: {usage_info.prompt_tokens_details.audio_tokens if hasattr(usage_info.prompt_tokens_details, 'audio_tokens') else 'N/A'}
"""
# 保存到文件
try:
with open(txt_path, 'w', encoding='utf-8') as f:
f.write(usage_content)
print(f"\n✅ 使用情况已保存到: {txt_path}")
return txt_path
except Exception as e:
print(f"\n❌ 保存使用情况文件失败: {e}")
return None
def save_simple_usage_info(usage_info, total_duration, money, video_path, save_dir="/root/autodl-tmp/final_output"):
"""
保存简化的API使用情况信息到TXT文件
:param usage_info: API使用情况对象
:param total_duration: API总响应时间
:param money: 费用信息字典
:param video_path: 原视频文件路径
:param save_dir: 保存目录
:return: 保存的文件路径
"""
# 创建保存目录
os.makedirs(save_dir, exist_ok=True)
# 生成文件名
video_name = os.path.splitext(os.path.basename(video_path))[0]
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
txt_filename = f"usage_{video_name}_{timestamp}.txt"
txt_path = os.path.join(save_dir, txt_filename)
# 简化的使用情况信息
usage_content = f"""API使用情况统计
=====================================
视频文件: {video_path}
统计时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
=====================================
使用情况: {usage_info}
总耗时: {total_duration:.2f}
费用: {money}
"""
# 保存到文件
try:
with open(txt_path, 'w', encoding='utf-8') as f:
f.write(usage_content)
print(f"\n✅ 使用情况已保存到: {txt_path}")
return txt_path
except Exception as e:
print(f"\n❌ 保存使用情况文件失败: {e}")
return None
if __name__ == "__main__":
# 测试函数
test_usage_info = "测试使用情况"
test_duration = 10.5
test_money = {
'output_momey': 0.001,
'prompt_momey': 0.002,
'video_momey': 0.003,
'audio_momey': 0.004,
'sum_momey': 0.010
}
test_video_path = "/root/autodl-tmp/video/test.mp4"
# 测试详细版本
save_usage_info_to_txt(test_usage_info, test_duration, test_money, test_video_path)
# 测试简化版本
save_simple_usage_info(test_usage_info, test_duration, test_money, test_video_path)