Show actual AI token usage and cost
This commit is contained in:
@@ -151,6 +151,9 @@ class ResultModel extends BaseDatabaseModel
|
||||
);
|
||||
$item->answers[$questionId]['ai_feedback'] = $aiResult['feedback'];
|
||||
$item->answers[$questionId]['awarded_points'] = $aiResult['awarded_points'];
|
||||
if ($aiResult['usage'] !== null) {
|
||||
$item->answers[$questionId]['ai_usage'] = $aiResult['usage'];
|
||||
}
|
||||
|
||||
$correctionPoints = 0;
|
||||
foreach ($item->answers as $savedAnswer) {
|
||||
|
||||
@@ -73,9 +73,46 @@ class AiService
|
||||
throw new \RuntimeException('AI zwróciło nieprawidłowy format oceny i punktów.');
|
||||
}
|
||||
|
||||
$usage = $this->getUsage($body, $provider, $config['model']);
|
||||
|
||||
return [
|
||||
'awarded_points' => min(max(0, $maxPoints), max(0, (int) $result['awarded_points'])),
|
||||
'feedback' => trim((string) ($result['feedback'] ?? '')),
|
||||
'usage' => $usage,
|
||||
];
|
||||
}
|
||||
|
||||
private function getUsage(array $body, string $provider, string $model): ?array
|
||||
{
|
||||
$usage = $body['usage'] ?? null;
|
||||
if (!is_array($usage) || !isset($usage['input_tokens'], $usage['output_tokens'])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$inputTokens = max(0, (int) $usage['input_tokens']);
|
||||
$outputTokens = max(0, (int) $usage['output_tokens']);
|
||||
$cachedTokens = min($inputTokens, max(0, (int) ($usage['input_tokens_details']['cached_tokens'] ?? 0)));
|
||||
$cost = null;
|
||||
$costSource = '';
|
||||
|
||||
if ($provider === 'grok' && isset($usage['cost_in_usd_ticks']) && is_numeric($usage['cost_in_usd_ticks'])) {
|
||||
$cost = (float) $usage['cost_in_usd_ticks'] / 10000000000;
|
||||
$costSource = 'provider';
|
||||
} elseif ($provider === 'openai' && $model === 'gpt-4.1-mini') {
|
||||
$uncachedTokens = $inputTokens - $cachedTokens;
|
||||
$cost = ($uncachedTokens * 0.40 + $cachedTokens * 0.10 + $outputTokens * 1.60) / 1000000;
|
||||
$costSource = 'token_rates';
|
||||
}
|
||||
|
||||
return [
|
||||
'provider' => $provider,
|
||||
'model' => $model,
|
||||
'input_tokens' => $inputTokens,
|
||||
'output_tokens' => $outputTokens,
|
||||
'total_tokens' => (int) ($usage['total_tokens'] ?? ($inputTokens + $outputTokens)),
|
||||
'cached_input_tokens' => $cachedTokens,
|
||||
'cost_usd' => $cost,
|
||||
'cost_source' => $costSource,
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user