Add pricing structure for token usage in CLI and enhance token handling in ModelDialog. Implement cost breakdown per model based on input, cached, and output tokens, and ensure proper initialization of token counts in usage handling.

This commit is contained in:
sebseb7
2025-08-21 13:31:15 +00:00
parent eb3f58b2e6
commit 46c9fe9fac
2 changed files with 79 additions and 8 deletions

View File

@@ -56,9 +56,12 @@ class ModelDialog {
};
handleUsage = (usage, model) => {
this.inputTokens[model] = usage.input_tokens-usage.input_tokens_details.cached_tokens;
this.outputTokens[model] = usage.output_tokens;
this.cachedTokens[model] = usage.input_tokens_details.cached_tokens;
if (typeof this.inputTokens[model] !== 'number') this.inputTokens[model] = 0;
if (typeof this.outputTokens[model] !== 'number') this.outputTokens[model] = 0;
if (typeof this.cachedTokens[model] !== 'number') this.cachedTokens[model] = 0;
this.inputTokens[model] += usage.input_tokens - usage.input_tokens_details.cached_tokens;
this.outputTokens[model] += usage.output_tokens;
this.cachedTokens[model] += usage.input_tokens_details.cached_tokens;
}
on = (event, callback) => {
@@ -89,16 +92,22 @@ class ModelDialog {
//console.log(chalk.blue('messages:'),JSON.stringify(messagesToSend,null,2));
this.messagesSent.push(...messagesToSend);
const model = 'gpt-5-mini';
const call = {
model: 'gpt-5',
model: model,
input: messagesToSend,
text: { format: { type: 'text' }, verbosity: 'low' },
reasoning: { effort: 'low', summary: 'detailed' },
text: { format: { type: 'text' } },
tools: Object.values(toolsByFile).map(t => t.def),
store: true,
previous_response_id: this.previousResponseId,
parallel_tool_calls: true
}
if(model.startsWith('gpt-5')){
call.reasoning = { effort: 'low', summary: 'detailed' };
//call.text.format.verbosity = 'low';
}
this.currentStream = openai.responses.stream(call);
this.currentStream.on('response.created', (event) => {
@@ -130,6 +139,7 @@ class ModelDialog {
this.currentStream.on('response.completed', async (event) => {
//console.log(chalk.blue('response completed:'),event.response.usage);
this.handleUsage(event.response.usage, event.response.model);
outputs.push(...event.response.output);