Response metadata
Many model providers include some metadata in their chat generation
responses. This metadata can be accessed via the
AIMessage.response_metadata
attribute. Depending on the model provider
and model configuration, this can contain information like token
counts and more.
Hereβs what the response metadata looks like for a few different providers:
OpenAIβ
import { ChatOpenAI } from "@langchain/openai";
const chatModel = new ChatOpenAI({ model: "gpt-4-turbo" });
const message = await chatModel.invoke([
["human", "What's the oldest known example of cuneiform"],
]);
console.log(message.response_metadata);
{
tokenUsage: { completionTokens: 164, promptTokens: 17, totalTokens: 181 },
finish_reason: "stop"
}
Anthropicβ
import { ChatAnthropic } from "@langchain/anthropic";
const chatModel = new ChatAnthropic({ model: "claude-3-sonnet-20240229" });
const message = await chatModel.invoke([
["human", "What's the oldest known example of cuneiform"],
]);
console.log(message.response_metadata);
{
id: "msg_01K8kC9wskG6qsSGRmY7b3kj",
model: "claude-3-sonnet-20240229",
stop_sequence: null,
usage: { input_tokens: 17, output_tokens: 355 },
stop_reason: "end_turn"
}
Google VertexAIβ
import { ChatVertexAI } from "@langchain/google-vertexai-web";
const chatModel = new ChatVertexAI({ model: "gemini-pro" });
const message = await chatModel.invoke([
["human", "What's the oldest known example of cuneiform"],
]);
console.log(message.response_metadata);
{
usage_metadata: {
prompt_token_count: undefined,
candidates_token_count: undefined,
total_token_count: undefined
},
safety_ratings: [
{
category: "HARM_CATEGORY_HATE_SPEECH",
probability: "NEGLIGIBLE",
probability_score: 0.027480692,
severity: "HARM_SEVERITY_NEGLIGIBLE",
severity_score: 0.073430054
},
{
category: "HARM_CATEGORY_DANGEROUS_CONTENT",
probability: "NEGLIGIBLE",
probability_score: 0.055412795,
severity: "HARM_SEVERITY_NEGLIGIBLE",
severity_score: 0.112405084
},
{
category: "HARM_CATEGORY_HARASSMENT",
probability: "NEGLIGIBLE",
probability_score: 0.055720285,
severity: "HARM_SEVERITY_NEGLIGIBLE",
severity_score: 0.020844316
},
{
category: "HARM_CATEGORY_SEXUALLY_EXPLICIT",
probability: "NEGLIGIBLE",
probability_score: 0.05223086,
severity: "HARM_SEVERITY_NEGLIGIBLE",
severity_score: 0.14891148
}
],
finish_reason: undefined
}
MistralAIβ
import { ChatMistralAI } from "@langchain/mistralai";
const chatModel = new ChatMistralAI({ model: "mistral-tiny" });
const message = await chatModel.invoke([
["human", "What's the oldest known example of cuneiform"],
]);
console.log(message.response_metadata);
{
tokenUsage: { completionTokens: 166, promptTokens: 19, totalTokens: 185 },
finish_reason: "stop"
}