home / skills / openclaw / skills / pricing-test

pricing-test skill

/skills/hexiaochun/pricing-test

This skill helps verify V3 model pricing and simulate charges by comparing official pricing with actual deductions.

npx playbooks add skill openclaw/skills --skill pricing-test

Review the files below or copy the command above to add this skill to your agents.

Files (3)
SKILL.md
3.1 KB
---
name: pricing-test
description: 测试和校验 V3 API 模型的定价信息和实际扣费。当用户要测试模型价格、校验扣费、验证新模型定价、或提到"价格测试"、"扣费测试"时使用此 skill。
---

# V3 模型价格测试

测试和校验模型的定价信息展示与实际扣费是否正确。

## 价格换算规则

```
1 美元 = 400 积分
```

| Fal 定价 | 系统积分 | 计算公式 |
|---------|---------|---------|
| $0.05 | 20 | 0.05 × 400 |
| $0.075 | 30 | 0.075 × 400 |
| $0.10 | 40 | 0.10 × 400 |

## 测试流程

### 第一步:获取官方定价

访问模型的 fal.ai 定价页面,记录价格信息并换算为积分:

```
https://fal.ai/models/{MODEL_ID}
```

示例:https://fal.ai/models/wan/v2.6/image-to-video/flash

### 第二步:检查 Executor 配置

检查 `translate_api/app/api/v3/executors/` 下对应 Executor 的配置:

```python
# 检查项
PRICE_MAP = {...}           # 价格映射
DURATION_OPTIONS = [...]    # 时长选项
RESOLUTION_OPTIONS = [...]  # 分辨率选项

def get_price(self, model, params):
    # 价格计算逻辑
```

### 第三步:测试定价信息展示

```bash
curl -s 'http://127.0.0.1:8002/api/v3/models/{MODEL_ID}/docs' \
  -H 'Authorization: Bearer {API_KEY}' | python3 -c "
import sys,json
d=json.load(sys.stdin)
print(json.dumps(d.get('data',{}).get('pricing',{}), indent=2, ensure_ascii=False))
"
```

**检查项**:
- `price_type` 应为 `duration_price`(视频模型)
- `price_description` 包含每秒价格
- `examples` 价格计算正确

### 第四步:测试实际扣费

```bash
curl -s 'http://127.0.0.1:8002/api/v3/tasks/create' \
  -H 'Authorization: Bearer {API_KEY}' \
  -H 'Content-Type: application/json' \
  --data-raw '{
    "model": "{MODEL_ID}",
    "params": {"prompt": "test", "image_url": "https://example.com/img.png", "duration": "5", "resolution": "1080p"}
  }' | python3 -c "
import sys,json; d=json.load(sys.stdin)
print(f\"扣费: {d['data']['price']} 积分\")
"
```

### 第五步:批量测试

运行测试脚本:

```bash
cd translate_api && python test_pricing.py
```

## 测试用例模板

| 参数 | 计算公式 | 预期 | 实际 | 结果 |
|------|---------|------|------|------|
| 5秒 720p | 5 × 20 | 100 | | |
| 5秒 1080p | 5 × 30 | 150 | | |
| 10秒 1080p | 10 × 30 | 300 | | |

## 新模型接入检查清单

```
- [ ] 获取官方定价信息
- [ ] 配置 Executor PRICE_MAP
- [ ] 实现 get_price() 方法
- [ ] 测试定价信息展示
- [ ] 测试实际扣费
- [ ] 添加测试用例
```

## 常见问题

| 问题 | 原因 | 解决 |
|------|------|------|
| 显示"按数量计费" | 未识别为视频模型 | 在 `_is_video_model()` 添加关键词 |
| 扣费固定 50 积分 | 数据库无配置且 Executor 未被调用 | 检查 Executor 注册 |
| 扣费与预期不符 | `get_price()` 计算错误 | 检查 PRICE_MAP 和计算逻辑 |

## 相关文件

- Executor 目录: `translate_api/app/api/v3/executors/`
- 计费逻辑: `translate_api/app/api/v2/pricing/fal_pricing.py`
- 测试脚本: `translate_api/test_pricing.py`
- 完整文档: [pricing-test-guide.md](../../../docs/pricing-test-guide.md)

Overview

This skill validates V3 API model pricing and verifies actual billing against displayed rates. It converts official dollar prices to internal credits, checks executor pricing logic, and runs single or batch tests to confirm charges. Use it to catch mismatches before releasing or onboarding new models.

How this skill works

The skill fetches official model prices from the model pricing page, converts USD to credits (1 USD = 400 credits), and compares those values to the configured PRICE_MAP in the executor. It inspects executor code (get_price, duration/resolution options) and exposes endpoints to fetch displayed pricing and create test tasks to observe actual billed credits. It also supports automated batch runs using provided test scripts to produce pass/fail results for test cases.

When to use it

  • Validating displayed pricing against official model pages
  • Verifying actual task billing matches expected credit calculations
  • Onboarding or updating a video model with new pricing
  • Investigating billing anomalies reported by users
  • Running scheduled checks after pricing or executor code changes

Best practices

  • Always retrieve the official price page for the model and convert using 1 USD = 400 credits before editing PRICE_MAP.
  • Keep PRICE_MAP, DURATION_OPTIONS, and RESOLUTION_OPTIONS in sync with official pricing and executor logic.
  • Add focused unit tests for get_price() and edge cases like unknown resolutions or default fallbacks.
  • Run the test_pricing.py batch script after any pricing or executor change and record results.
  • When a mismatch appears, first inspect executor registration and whether the correct executor is invoked.

Example use cases

  • Convert fal.ai model price (USD) to credits and update executor PRICE_MAP.
  • Call the /api/v3/models/{MODEL_ID}/docs endpoint to validate displayed pricing fields (price_type, examples, price_description).
  • Create a test task via /api/v3/tasks/create to confirm the actual deducted credits for a given duration and resolution.
  • Run translate_api/test_pricing.py to validate multiple predefined cases like 5s@1080p or 10s@1080p.
  • Use the checklist when onboarding a new video model to ensure pricing and billing are correct.

FAQ

What conversion rate is used between USD and credits?

The skill uses 1 USD = 400 credits for all conversions.

Which fields should I check in the pricing docs endpoint?

Confirm price_type (video models use duration_price), price_description includes per-second rate, and examples show correct calculations.

What if billed credits differ from expected values?

First verify the executor was registered and invoked, then inspect PRICE_MAP and get_price() logic for calculation or mapping errors.