({
inputPayload,
completion,
fineTune,
}: {
inputPayload: z.infer<typeof chatCompletionInput>;
completion: ChatCompletion;
fineTune?: FineTune;
})
| 104 | }; |
| 105 | |
| 106 | export const calculateUsage = ({ |
| 107 | inputPayload, |
| 108 | completion, |
| 109 | fineTune, |
| 110 | }: { |
| 111 | inputPayload: z.infer<typeof chatCompletionInput>; |
| 112 | completion: ChatCompletion; |
| 113 | fineTune?: FineTune; |
| 114 | }): CalculatedUsage | undefined => { |
| 115 | let provider: BaseModel["provider"] | undefined = undefined; |
| 116 | let baseModel: BaseModel["baseModel"] | undefined = undefined; |
| 117 | |
| 118 | if (fineTune) { |
| 119 | const typedFT = typedFineTune(fineTune); |
| 120 | provider = typedFT.provider; |
| 121 | baseModel = typedFT.baseModel; |
| 122 | } else if (inputPayload.model.startsWith("ft:")) { |
| 123 | provider = "openai"; |
| 124 | baseModel = "gpt-3.5-turbo-1106"; |
| 125 | } |
| 126 | |
| 127 | // Return usage for non-fine-tuned OpenAI models |
| 128 | if (!provider || !baseModel) { |
| 129 | return openAIModelProvider.getUsage(inputPayload, completion) ?? undefined; |
| 130 | } |
| 131 | |
| 132 | let inputTokens; |
| 133 | let outputTokens; |
| 134 | |
| 135 | if (completion.usage) { |
| 136 | inputTokens = completion.usage.prompt_tokens; |
| 137 | outputTokens = completion.usage.completion_tokens; |
| 138 | } else if (baseModel === "gpt-3.5-turbo-0613" || baseModel === "gpt-3.5-turbo-1106") { |
| 139 | inputTokens = countOpenAIChatTokens(baseModel, inputPayload.messages); |
| 140 | outputTokens = completion.choices[0]?.message |
| 141 | ? countOpenAIChatTokens(baseModel, [completion.choices[0].message]) |
| 142 | : 0; |
| 143 | } else { |
| 144 | inputTokens = countLlamaInputTokens(inputPayload); |
| 145 | outputTokens = completion.choices[0]?.message |
| 146 | ? countLlamaOutputTokens(completion.choices[0]?.message) |
| 147 | : 0; |
| 148 | } |
| 149 | |
| 150 | const { cost, inputCost, outputCost } = calculateCost( |
| 151 | { |
| 152 | provider, |
| 153 | baseModel, |
| 154 | } as BaseModel, |
| 155 | 0, |
| 156 | inputTokens, |
| 157 | outputTokens, |
| 158 | ); |
| 159 | |
| 160 | return { |
| 161 | inputTokens, |
| 162 | outputTokens, |
| 163 | cost, |
no test coverage detected