test_price_parser.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/usr/bin/env python3
  2. """
  3. 测试 price_parser.py 的解析逻辑
  4. """
  5. import json
  6. from app.utils.price_parser import parse_prices
  7. # ── 测试数据1:qwen3-max 阶梯计费 ──
  8. prices_qwen3_max = {
  9. "input<=32k": {
  10. "输入": {"raw": "2.5", "unit": "元/每百万tokens", "price": 2.5, "currency": "CNY"},
  11. "输出": {"raw": "10", "unit": "元/每百万tokens", "price": 10.0, "currency": "CNY"},
  12. },
  13. "32k<input<=128k": {
  14. "输入": {"raw": "4", "unit": "元/每百万tokens", "price": 4.0, "currency": "CNY"},
  15. "输出": {"raw": "16", "unit": "元/每百万tokens", "price": 16.0, "currency": "CNY"},
  16. },
  17. "128k<input<=256k": {
  18. "输入": {"raw": "7", "unit": "元/每百万tokens", "price": 7.0, "currency": "CNY"},
  19. "输出": {"raw": "28", "unit": "元/每百万tokens", "price": 28.0, "currency": "CNY"},
  20. },
  21. }
  22. # ── 测试数据2:wan2.6-i2v 按单位计费 ──
  23. prices_wan26_i2v = {
  24. "视频生成(720P)": {"raw": "0.6", "unit": "元/每秒", "price": 0.6, "currency": "CNY"},
  25. "视频生成(1080P)": {"raw": "1", "unit": "元/每秒", "price": 1.0, "currency": "CNY"},
  26. }
  27. # ── 测试数据3:非阶梯(假设某个简单模型) ──
  28. prices_simple = {
  29. "输入": {"raw": "0.5", "unit": "元/每百万tokens", "price": 0.5, "currency": "CNY"},
  30. "输出": {"raw": "2.0", "unit": "元/每百万tokens", "price": 2.0, "currency": "CNY"},
  31. }
  32. def test_case(name: str, prices: dict):
  33. print(f"\n{'='*60}")
  34. print(f"测试:{name}")
  35. print(f"{'='*60}")
  36. print("输入 prices:")
  37. print(json.dumps(prices, ensure_ascii=False, indent=2))
  38. print("\n解析结果:")
  39. result = parse_prices(prices)
  40. print(json.dumps(result, ensure_ascii=False, indent=2))
  41. if __name__ == "__main__":
  42. test_case("qwen3-max 阶梯计费", prices_qwen3_max)
  43. test_case("wan2.6-i2v 按单位计费", prices_wan26_i2v)
  44. test_case("简单非阶梯", prices_simple)
  45. # ── 测试数据4:qwen-flash 含无上限阶梯 ──
  46. prices_qwen_flash = {
  47. "input<=32k": {
  48. "输入": {"raw": "0.15", "unit": "元/每百万tokens", "price": 0.15, "currency": "CNY"},
  49. "输出": {"raw": "0.6", "unit": "元/每百万tokens", "price": 0.6, "currency": "CNY"},
  50. },
  51. "32k<input<=256k": {
  52. "输入": {"raw": "0.6", "unit": "元/每百万tokens", "price": 0.6, "currency": "CNY"},
  53. "输出": {"raw": "2.4", "unit": "元/每百万tokens", "price": 2.4, "currency": "CNY"},
  54. },
  55. "256k<input": {
  56. "输入": {"raw": "1.2", "unit": "元/每百万tokens", "price": 1.2, "currency": "CNY"},
  57. "输出": {"raw": "4.8", "unit": "元/每百万tokens", "price": 4.8, "currency": "CNY"},
  58. },
  59. }
  60. test_case("qwen-flash 含无上限阶梯", prices_qwen_flash)