Documentation Index
Fetch the complete documentation index at: https://docs.fenra.io/llms.txt
Use this file to discover all available pages before exploring further.
This guide covers how to send Google AI usage data to Fenra.
Gemini API
import { GoogleGenerativeAI } from '@google/generative-ai';
const genAI = new GoogleGenerativeAI(process.env.GOOGLE_API_KEY);
async function chat(prompt) {
const model = genAI.getGenerativeModel({ model: 'gemini-1.5-pro' });
const result = await model.generateContent(prompt);
const usage = result.response.usageMetadata;
// Send to Fenra
await fetch('https://ingest.fenra.io/usage/transactions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Api-Key': process.env.FENRA_API_KEY
},
body: JSON.stringify({
provider: 'gemini',
model: 'gemini-1.5-pro',
usage: [{
type: 'tokens',
metrics: {
input_tokens: usage.promptTokenCount,
output_tokens: usage.candidatesTokenCount,
total_tokens: usage.totalTokenCount
}
}],
context: {
billable_customer_id: process.env.BILLABLE_CUSTOMER_ID
}
})
});
return result.response;
}
Context Caching
When using context caching, include cached tokens:
usage: [{
type: 'tokens',
metrics: {
input_tokens: usage.promptTokenCount,
output_tokens: usage.candidatesTokenCount,
total_tokens: usage.totalTokenCount,
cached_tokens: usage.cachedContentTokenCount || 0
}
}]
Gemini handles images, video, and audio natively. Token counts include all modalities, so no separate tracking is needed.
Thinking Tokens
For Gemini 2.5 models with thinking enabled, include thinking tokens:
usage: [{
type: 'tokens',
metrics: {
input_tokens: usage.promptTokenCount,
output_tokens: usage.candidatesTokenCount,
total_tokens: usage.totalTokenCount,
thinking_tokens: usage.thoughtsTokenCount || 0
}
}]
Grounding with Google Search
When using Google Search grounding, track the tool invocations:
const result = await model.generateContent({
contents: prompt,
tools: [{ functionDeclarations: [searchTool] }]
});
// Check if grounding was used
const groundingMetadata = result.response.groundingMetadata;
const searchQueries = groundingMetadata?.webSearchQueries || [];
await fetch('https://ingest.fenra.io/usage/transactions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Api-Key': process.env.FENRA_API_KEY
},
body: JSON.stringify({
provider: 'gemini',
model: 'gemini-1.5-pro',
usage: [
{
type: 'tokens',
metrics: {
input_tokens: usage.promptTokenCount,
output_tokens: usage.candidatesTokenCount,
total_tokens: usage.totalTokenCount
}
},
{
type: 'requests',
metrics: {
count: searchQueries.length,
request_type: 'google_grounding'
}
}
],
context: {
billable_customer_id: process.env.BILLABLE_CUSTOMER_ID
}
})
});
Supported Models
Fenra supports all Google Gemini models. Common models include:
| Model | Context Window |
|---|
gemini-2.0-flash | 1M tokens |
gemini-1.5-pro | 2M tokens |
gemini-1.5-flash | 1M tokens |
gemini-1.5-flash-8b | 1M tokens |
Next Steps