diff --git a/src/chatgpt.ts b/src/chatgpt.ts index 405ea86..d41705d 100644 --- a/src/chatgpt.ts +++ b/src/chatgpt.ts @@ -49,10 +49,24 @@ interface LogprobsContent { logprob: number; } +interface PromptTokensDetails { + cached_tokens: number; + audio_tokens: number; +} + +interface CompletionTokensDetails { + reasoning_tokens: number; + audio_tokens: number; + accepted_prediction_tokens: number; + rejected_prediction_tokens: number; +} + export interface Usage { prompt_tokens: number; completion_tokens: number; total_tokens: number; + prompt_tokens_details: PromptTokensDetails | null; + completion_tokens_details: CompletionTokensDetails | null; response_model_name: string | null; } @@ -96,11 +110,7 @@ export interface FetchResponse { object: string; created: number; model: string; - usage: { - prompt_tokens: number | undefined; - completion_tokens: number | undefined; - total_tokens: number | undefined; - }; + usage: Usage; choices: { message: Message | undefined; finish_reason: "stop" | "length"; diff --git a/src/pages/Chatbox.tsx b/src/pages/Chatbox.tsx index 8d05d89..870aa8a 100644 --- a/src/pages/Chatbox.tsx +++ b/src/pages/Chatbox.tsx @@ -219,6 +219,8 @@ export default function ChatBOX() { completion_tokens: responseTokenCount, total_tokens: prompt_tokens + responseTokenCount, response_model_name: response_model_name, + prompt_tokens_details: null, + completion_tokens_details: null, }; if (usage) { @@ -226,6 +228,8 @@ export default function ChatBOX() { ret.completion_tokens = usage.completion_tokens ?? responseTokenCount; ret.total_tokens = usage.total_tokens ?? prompt_tokens + responseTokenCount; + ret.prompt_tokens_details = usage.prompt_tokens_details ?? null; + ret.completion_tokens_details = usage.completion_tokens_details ?? null; } return ret; @@ -265,6 +269,8 @@ export default function ChatBOX() { completion_tokens: data.usage.completion_tokens ?? 0, total_tokens: data.usage.total_tokens ?? 0, response_model_name: data.model ?? null, + prompt_tokens_details: data.usage.prompt_tokens_details ?? null, + completion_tokens_details: data.usage.completion_tokens_details ?? null, }; return ret; diff --git a/src/types/models.ts b/src/types/models.ts index e70aca9..33aac1f 100644 --- a/src/types/models.ts +++ b/src/types/models.ts @@ -3,112 +3,120 @@ interface Model { price: { prompt: number; completion: number; + cached_prompt?: number; }; } +const M = 1000 / 1000; // dollars per million tokens +const K = 1000; // dollars per thousand tokens + export const models: Record = { "gpt-4o": { maxToken: 128000, - price: { prompt: 0.005 / 1000, completion: 0.015 / 1000 }, + price: { prompt: 2.5 / M, cached_prompt: 1.25 / M, completion: 10 / M }, }, "gpt-4o-2024-11-20": { maxToken: 128000, - price: { prompt: 0.0025 / 1000, completion: 0.01 / 1000 }, + price: { prompt: 2.5 / M, cached_prompt: 1.25 / M, completion: 10 / M }, }, "gpt-4o-2024-08-06": { maxToken: 128000, - price: { prompt: 0.0025 / 1000, completion: 0.01 / 1000 }, + price: { prompt: 2.5 / M, cached_prompt: 1.25 / M, completion: 10 / M }, }, "gpt-4o-2024-05-13": { maxToken: 128000, - price: { prompt: 0.005 / 1000, completion: 0.015 / 1000 }, + price: { prompt: 5 / M, completion: 15 / M }, }, "gpt-4o-mini": { maxToken: 128000, - price: { prompt: 0.15 / 1000 / 1000, completion: 0.6 / 1000 / 1000 }, + price: { prompt: 0.15 / M, cached_prompt: 0.075 / M, completion: 0.6 / M }, }, "gpt-4o-mini-2024-07-18": { maxToken: 128000, - price: { prompt: 0.15 / 1000 / 1000, completion: 0.6 / 1000 / 1000 }, + price: { prompt: 0.15 / M, cached_prompt: 0.075 / M, completion: 0.6 / M }, + }, + o1: { + maxToken: 128000, + price: { prompt: 15 / M, cached_prompt: 7.5 / M, completion: 60 }, + }, + "o1-2024-12-17": { + maxToken: 128000, + price: { prompt: 15 / M, cached_prompt: 7.5 / M, completion: 60 }, }, "o1-preview": { maxToken: 128000, - price: { prompt: 15 / 1000 / 1000, completion: 60 / 1000 / 1000 }, + price: { prompt: 15 / M, cached_prompt: 7.5 / M, completion: 60 }, }, "o1-preview-2024-09-12": { maxToken: 128000, - price: { prompt: 15 / 1000 / 1000, completion: 60 / 1000 / 1000 }, + price: { prompt: 15 / M, cached_prompt: 7.5 / M, completion: 60 }, }, "o1-mini": { maxToken: 128000, - price: { prompt: 3 / 1000 / 1000, completion: 12 / 1000 / 1000 }, + price: { prompt: 3 / M, cached_prompt: 1.5 / M, completion: 12 / M }, }, "o1-mini-2024-09-12": { maxToken: 128000, - price: { prompt: 3 / 1000 / 1000, completion: 12 / 1000 / 1000 }, + price: { prompt: 3 / M, cached_prompt: 1.5 / M, completion: 12 / M }, }, "chatgpt-4o-latest": { maxToken: 128000, - price: { prompt: 0.005 / 1000, completion: 0.015 / 1000 }, + price: { prompt: 5 / M, completion: 15 / M }, }, "gpt-4-turbo": { maxToken: 128000, - price: { prompt: 0.01 / 1000, completion: 0.03 / 1000 }, + price: { prompt: 10 / M, completion: 30 / M }, }, "gpt-4-turbo-2024-04-09": { maxToken: 128000, - price: { prompt: 0.01 / 1000, completion: 0.03 / 1000 }, + price: { prompt: 10 / M, completion: 30 / M }, }, "gpt-4": { - maxToken: 8192, - price: { prompt: 0.03 / 1000, completion: 0.06 / 1000 }, + maxToken: 8000, + price: { prompt: 30 / M, completion: 60 / M }, }, "gpt-4-32k": { - maxToken: 8192, - price: { prompt: 0.06 / 1000, completion: 0.12 / 1000 }, + maxToken: 32000, + price: { prompt: 60 / M, completion: 120 / M }, }, "gpt-4-0125-preview": { maxToken: 128000, - price: { prompt: 0.01 / 1000, completion: 0.03 / 1000 }, + price: { prompt: 10 / M, completion: 30 / M }, }, "gpt-4-1106-preview": { maxToken: 128000, - price: { prompt: 0.01 / 1000, completion: 0.03 / 1000 }, + price: { prompt: 10 / M, completion: 30 / M }, }, "gpt-4-vision-preview": { maxToken: 128000, - price: { prompt: 0.01 / 1000, completion: 0.03 / 1000 }, + price: { prompt: 10 / M, completion: 30 / M }, }, "gpt-4-1106-vision-preview": { maxToken: 128000, price: { prompt: 0.01 / 1000, completion: 0.03 / 1000 }, }, - "gpt-3.5-turbo": { - maxToken: 4096, - price: { prompt: 0.0015 / 1000, completion: 0.002 / 1000 }, - }, "gpt-3.5-turbo-0125": { - maxToken: 16385, - price: { prompt: 0.0005 / 1000, completion: 0.0015 / 1000 }, + maxToken: 16000, + price: { prompt: 0.5 / M, completion: 1.5 / M }, }, "gpt-3.5-turbo-instruct": { - maxToken: 16385, - price: { prompt: 0.5 / 1000 / 1000, completion: 2 / 1000 / 1000 }, + maxToken: 16000, + price: { prompt: 1.5 / M, completion: 2 / M }, }, "gpt-3.5-turbo-1106": { - maxToken: 16385, - price: { prompt: 0.001 / 1000, completion: 0.002 / 1000 }, + maxToken: 16000, + price: { prompt: 1 / M, completion: 2 / M }, }, "gpt-3.5-turbo-0613": { - maxToken: 16385, - price: { prompt: 1.5 / 1000 / 1000, completion: 2 / 1000 / 1000 }, + maxToken: 16000, + price: { prompt: 1.5 / M, completion: 2 / M }, }, "gpt-3.5-turbo-16k-0613": { - maxToken: 16385, - price: { prompt: 0.003 / 1000, completion: 0.004 / 1000 }, + maxToken: 16000, + price: { prompt: 3 / M, completion: 4 / M }, }, "gpt-3.5-turbo-0301": { maxToken: 16385, - price: { prompt: 1.5 / 1000 / 1000, completion: 2 / 1000 / 1000 }, + price: { prompt: 1.5 / M, completion: 2 / M }, }, };