in server/src/main/java/com/epam/aidial/core/server/token/TokenUsageParser.java [28:66]
private TokenUsage parseUsage(Buffer body) throws Exception {
int index = findUsage(body);
if (index < 0) {
return null;
}
ByteBuf slice = body.slice(index, body.length()).getByteBuf();
JsonFactory factory = new JsonFactory();
try (InputStream stream = new ByteBufInputStream(slice); JsonParser parser = factory.createParser(stream)) {
TokenUsage usage = new TokenUsage();
verify(parser.nextToken(), JsonToken.START_OBJECT);
while (true) {
JsonToken token = parser.nextToken();
if (token == JsonToken.END_OBJECT) {
return usage;
}
verify(token, JsonToken.FIELD_NAME);
String name = parser.getCurrentName();
token = parser.nextValue();
verify(token,
JsonToken.VALUE_NUMBER_INT, JsonToken.VALUE_NUMBER_FLOAT,
JsonToken.VALUE_STRING, JsonToken.VALUE_NULL,
JsonToken.VALUE_FALSE, JsonToken.VALUE_TRUE);
switch (name) {
case "completion_tokens" -> usage.setCompletionTokens(parser.getLongValue());
case "prompt_tokens" -> usage.setPromptTokens(parser.getLongValue());
case "total_tokens" -> usage.setTotalTokens(parser.getLongValue());
default -> {
// ignore
}
}
}
}
}