wpmind/includes/Usage/Pricing.php
LinuxJoy adb6c49301 style: phpcbf 自动格式化 — 全量 WPCS 3.x 规范对齐
135 文件 19,211 处自动修复:空格→Tab 缩进、括号间距、
函数声明空格、前置自增、尾逗号等纯格式化改动。
零逻辑变更,php -l + token 级对比验证通过。

新增 phpcs.xml.dist / phpstan.neon.dist 项目配置。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 00:48:46 +08:00

257 lines
4.9 KiB
PHP

<?php
/**
* AI Provider Pricing Data
*
* Centralized pricing constants shared between UsageTracker implementations.
* Prices are per 1M tokens. Data source: provider official sites (2026-01).
*
* @package WPMind\Usage
* @since 3.2.1
*/
declare(strict_types=1);
namespace WPMind\Usage;
class Pricing {
/**
* Provider pricing data (per 1M tokens).
*
* currency: USD or CNY
*/
public const DATA = [
'openai' => [
'currency' => 'USD',
'gpt-4o' => [
'input' => 2.50,
'output' => 10.00,
],
'gpt-4o-mini' => [
'input' => 0.15,
'output' => 0.60,
],
'gpt-4-turbo' => [
'input' => 10.00,
'output' => 30.00,
],
'gpt-3.5-turbo' => [
'input' => 0.50,
'output' => 1.50,
],
'default' => [
'input' => 2.50,
'output' => 10.00,
],
],
'anthropic' => [
'currency' => 'USD',
'claude-3-5-sonnet' => [
'input' => 3.00,
'output' => 15.00,
],
'claude-3-opus' => [
'input' => 15.00,
'output' => 75.00,
],
'claude-3-haiku' => [
'input' => 0.25,
'output' => 1.25,
],
'default' => [
'input' => 3.00,
'output' => 15.00,
],
],
'google' => [
'currency' => 'USD',
'gemini-1.5-pro' => [
'input' => 1.25,
'output' => 5.00,
],
'gemini-1.5-flash' => [
'input' => 0.075,
'output' => 0.30,
],
'gemini-2.0-flash' => [
'input' => 0.10,
'output' => 0.40,
],
'default' => [
'input' => 0.075,
'output' => 0.30,
],
],
'deepseek' => [
'currency' => 'CNY',
'deepseek-chat' => [
'input' => 1.00,
'output' => 2.00,
],
'deepseek-reasoner' => [
'input' => 4.00,
'output' => 16.00,
],
'default' => [
'input' => 1.00,
'output' => 2.00,
],
],
'qwen' => [
'currency' => 'CNY',
'qwen-turbo' => [
'input' => 2.00,
'output' => 6.00,
],
'qwen-plus' => [
'input' => 4.00,
'output' => 12.00,
],
'qwen-max' => [
'input' => 20.00,
'output' => 60.00,
],
'default' => [
'input' => 2.00,
'output' => 6.00,
],
],
'zhipu' => [
'currency' => 'CNY',
'glm-4' => [
'input' => 100.00,
'output' => 100.00,
],
'glm-4-flash' => [
'input' => 1.00,
'output' => 1.00,
],
'glm-4-plus' => [
'input' => 50.00,
'output' => 50.00,
],
'default' => [
'input' => 1.00,
'output' => 1.00,
],
],
'moonshot' => [
'currency' => 'CNY',
'moonshot-v1-8k' => [
'input' => 12.00,
'output' => 12.00,
],
'moonshot-v1-32k' => [
'input' => 24.00,
'output' => 24.00,
],
'moonshot-v1-128k' => [
'input' => 60.00,
'output' => 60.00,
],
'default' => [
'input' => 12.00,
'output' => 12.00,
],
],
'doubao' => [
'currency' => 'CNY',
'doubao-pro-4k' => [
'input' => 0.80,
'output' => 2.00,
],
'doubao-pro-32k' => [
'input' => 0.80,
'output' => 2.00,
],
'doubao-pro-128k' => [
'input' => 5.00,
'output' => 9.00,
],
'default' => [
'input' => 0.80,
'output' => 2.00,
],
],
'siliconflow' => [
'currency' => 'CNY',
'deepseek-ai/DeepSeek-V3' => [
'input' => 1.00,
'output' => 2.00,
],
'Qwen/Qwen2.5-72B-Instruct' => [
'input' => 4.00,
'output' => 4.00,
],
'default' => [
'input' => 1.00,
'output' => 2.00,
],
],
'baidu' => [
'currency' => 'CNY',
'ernie-4.0' => [
'input' => 30.00,
'output' => 60.00,
],
'ernie-3.5' => [
'input' => 1.20,
'output' => 1.20,
],
'default' => [
'input' => 1.20,
'output' => 1.20,
],
],
'minimax' => [
'currency' => 'CNY',
'abab6.5s-chat' => [
'input' => 1.00,
'output' => 1.00,
],
'abab6.5-chat' => [
'input' => 30.00,
'output' => 30.00,
],
'default' => [
'input' => 1.00,
'output' => 1.00,
],
],
];
/**
* Get pricing for a provider.
*/
public static function get( string $provider ): array {
return self::DATA[ $provider ] ?? [];
}
/**
* Get currency for a provider.
*/
public static function get_currency( string $provider ): string {
return self::DATA[ $provider ]['currency'] ?? 'USD';
}
/**
* Calculate cost for a request.
*/
public static function calculate_cost(
string $provider,
string $model,
int $inputTokens,
int $outputTokens
): float {
$pricing = self::DATA[ $provider ] ?? [];
$modelPricing = $pricing[ $model ] ?? $pricing['default'] ?? [
'input' => 0,
'output' => 0,
];
$inputCost = ( $inputTokens / 1_000_000 ) * ( $modelPricing['input'] ?? 0 );
$outputCost = ( $outputTokens / 1_000_000 ) * ( $modelPricing['output'] ?? 0 );
return round( $inputCost + $outputCost, 6 );
}
}