feat: get tokens from api usage (#4671)

This commit is contained in:
Archer
2025-04-27 01:13:38 +08:00
committed by GitHub
parent 0720bbe4da
commit 1465999c46
26 changed files with 270 additions and 223 deletions

View File

@@ -2,7 +2,7 @@ import type { ChatCompletionMessageParam } from '@fastgpt/global/core/ai/type.d'
import { createChatCompletion } from '../config';
import { countGptMessagesTokens, countPromptTokens } from '../../../common/string/tiktoken/index';
import { loadRequestMessages } from '../../chat/utils';
import { llmCompletionsBodyFormat } from '../utils';
import { llmCompletionsBodyFormat, llmResponseToAnswerText } from '../utils';
import {
QuestionGuidePrompt,
QuestionGuideFooterPrompt
@@ -35,7 +35,7 @@ export async function createQuestionGuide({
useVision: false
});
const { response: data } = await createChatCompletion({
const { response } = await createChatCompletion({
body: llmCompletionsBodyFormat(
{
model,
@@ -47,21 +47,20 @@ export async function createQuestionGuide({
model
)
});
const answer = data.choices?.[0]?.message?.content || '';
const { text: answer, usage } = await llmResponseToAnswerText(response);
const start = answer.indexOf('[');
const end = answer.lastIndexOf(']');
const inputTokens = await countGptMessagesTokens(requestMessages);
const outputTokens = await countPromptTokens(answer);
const inputTokens = usage?.prompt_tokens || (await countGptMessagesTokens(requestMessages));
const outputTokens = usage?.completion_tokens || (await countPromptTokens(answer));
if (start === -1 || end === -1) {
addLog.warn('Create question guide error', { answer });
return {
result: [],
inputTokens: 0,
outputTokens: 0
inputTokens,
outputTokens
};
}
@@ -81,8 +80,8 @@ export async function createQuestionGuide({
return {
result: [],
inputTokens: 0,
outputTokens: 0
inputTokens,
outputTokens
};
}
}