| import type { OpenAICompletionsResponse } from '../../shared/api/completionsClient'; |
| import type { ChatDisplaySegment } from './chatSegments'; |
|
|
| type ApiTokenUsage = NonNullable<OpenAICompletionsResponse['usage']>; |
|
|
| |
| |
| |
| |
| |
| export function aggregateUsageFromSegments( |
| segments: ChatDisplaySegment[] |
| ): ApiTokenUsage | null { |
| let prompt_tokens = 0; |
| let completion_tokens = 0; |
| let total_tokens = 0; |
| let count = 0; |
|
|
| for (const seg of segments) { |
| if (seg.kind !== 'output') continue; |
| const u = seg.response.usage; |
| if ( |
| typeof u?.prompt_tokens !== 'number' || |
| typeof u?.completion_tokens !== 'number' || |
| typeof u?.total_tokens !== 'number' |
| ) { |
| return {}; |
| } |
| prompt_tokens += u.prompt_tokens; |
| completion_tokens += u.completion_tokens; |
| total_tokens += u.total_tokens; |
| count++; |
| } |
|
|
| return count > 0 ? { prompt_tokens, completion_tokens, total_tokens } : null; |
| } |
|
|