|
@@ -347,14 +347,14 @@ class DeepSeekService
|
|
|
* @param string $model
|
|
* @param string $model
|
|
|
* @return \Generator
|
|
* @return \Generator
|
|
|
*/
|
|
*/
|
|
|
- private function wrapGenerateTextTokenRecord(\Generator $generator, int $uid, string $model): \Generator
|
|
|
|
|
|
|
+ private function wrapGenerateTextTokenRecord(\Generator $generator, int $uid, string $model, string $source = 'generateText'): \Generator
|
|
|
{
|
|
{
|
|
|
$recorded = false;
|
|
$recorded = false;
|
|
|
foreach ($generator as $chunk) {
|
|
foreach ($generator as $chunk) {
|
|
|
if (!$recorded && isset($chunk['type']) && $chunk['type'] === 'done') {
|
|
if (!$recorded && isset($chunk['type']) && $chunk['type'] === 'done') {
|
|
|
$this->recordTextTokenOnly($uid, $this->pointsService->getTokensFromUsage(getProp($chunk, 'usage', [])), [
|
|
$this->recordTextTokenOnly($uid, $this->pointsService->getTokensFromUsage(getProp($chunk, 'usage', [])), [
|
|
|
'model' => $model,
|
|
'model' => $model,
|
|
|
- 'source' => 'generateText',
|
|
|
|
|
|
|
+ 'source' => $source,
|
|
|
], $model);
|
|
], $model);
|
|
|
$recorded = true;
|
|
$recorded = true;
|
|
|
}
|
|
}
|
|
@@ -1239,12 +1239,23 @@ class DeepSeekService
|
|
|
dLog('deepseek')->info('Gemini请求参数', ['model' => $model, 'stream' => $isStream]);
|
|
dLog('deepseek')->info('Gemini请求参数', ['model' => $model, 'stream' => $isStream]);
|
|
|
|
|
|
|
|
if ($isStream) {
|
|
if ($isStream) {
|
|
|
- // 流式返回生成器
|
|
|
|
|
- return $this->geminiStreamResponse($requestData, $model);
|
|
|
|
|
|
|
+ // 流式返回生成器,成功后记录 token 使用明细(不扣积分)
|
|
|
|
|
+ return $this->wrapGenerateTextTokenRecord(
|
|
|
|
|
+ $this->geminiStreamResponse($requestData, $model),
|
|
|
|
|
+ $this->getCurrentUid(),
|
|
|
|
|
+ $model,
|
|
|
|
|
+ 'geminiGenerateText'
|
|
|
|
|
+ );
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 非流式
|
|
|
|
|
- return $this->geminiChatOnly($requestData, $model);
|
|
|
|
|
|
|
+ // 非流式:成功后记录 token 使用明细(不扣积分)
|
|
|
|
|
+ $result = $this->geminiChatOnly($requestData, $model);
|
|
|
|
|
+ $this->recordTextTokenOnly($this->getCurrentUid(), $this->pointsService->getTokensFromUsage($result['usage'] ?? []), [
|
|
|
|
|
+ 'model' => $model,
|
|
|
|
|
+ 'source' => 'geminiGenerateText',
|
|
|
|
|
+ ], $model);
|
|
|
|
|
+
|
|
|
|
|
+ return $result;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -14182,6 +14193,13 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
|
|
|
];
|
|
];
|
|
|
|
|
|
|
|
$result = $this->chatOnly($post_data, 8);
|
|
$result = $this->chatOnly($post_data, 8);
|
|
|
|
|
+
|
|
|
|
|
+ // 调用成功即记录 token 使用明细(不扣积分),保证错误分析这类隐性 AI 调用进入统计口径
|
|
|
|
|
+ $this->recordTextTokenOnly($this->getCurrentUid(), $this->pointsService->getTokensFromUsage($result['usage'] ?? []), [
|
|
|
|
|
+ 'model' => 'deepseek-v4-flash',
|
|
|
|
|
+ 'source' => 'analyzeErrorMessage',
|
|
|
|
|
+ ], 'deepseek-v4-flash');
|
|
|
|
|
+
|
|
|
$content = trim((string)($result['fullContent'] ?? ''));
|
|
$content = trim((string)($result['fullContent'] ?? ''));
|
|
|
if ($content === '') {
|
|
if ($content === '') {
|
|
|
return null;
|
|
return null;
|