MCPcopy Index your code
hub / github.com/OpenPipe/OpenPipe / calculateUsage

Function calculateUsage

app/src/utils/recordRequest.ts:106–167  ·  view source on GitHub ↗
({
  inputPayload,
  completion,
  fineTune,
}: {
  inputPayload: z.infer<typeof chatCompletionInput>;
  completion: ChatCompletion;
  fineTune?: FineTune;
})

Source from the content-addressed store, hash-verified

104};
105
106export 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,

Callers 2

recordUsageFunction · 0.85

Calls 5

typedFineTuneFunction · 0.90
countOpenAIChatTokensFunction · 0.90
countLlamaInputTokensFunction · 0.90
countLlamaOutputTokensFunction · 0.90
calculateCostFunction · 0.90

Tested by

no test coverage detected