feat(ai): surfacea Gemini token-usage
This commit is contained in:
@@ -36,6 +36,7 @@ export interface AamosResult<T extends AamosTaskType> {
|
|||||||
costUsd?: number | undefined;
|
costUsd?: number | undefined;
|
||||||
inputTokens?: number | undefined;
|
inputTokens?: number | undefined;
|
||||||
outputTokens?: number | undefined;
|
outputTokens?: number | undefined;
|
||||||
|
totalTokens?: number | undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -376,7 +376,7 @@ export class GeminiAamosClient implements AamosClient {
|
|||||||
|
|
||||||
const geminiBody = (await res.json()) as {
|
const geminiBody = (await res.json()) as {
|
||||||
candidates?: Array<{ content?: { parts?: Array<{ text?: string }> } }>;
|
candidates?: Array<{ content?: { parts?: Array<{ text?: string }> } }>;
|
||||||
usageMetadata?: { promptTokenCount?: number; candidatesTokenCount?: number };
|
usageMetadata?: { promptTokenCount?: number; candidatesTokenCount?: number; totalTokenCount?: number };
|
||||||
};
|
};
|
||||||
const text = geminiBody.candidates?.[0]?.content?.parts?.[0]?.text ?? "";
|
const text = geminiBody.candidates?.[0]?.content?.parts?.[0]?.text ?? "";
|
||||||
|
|
||||||
@@ -394,6 +394,7 @@ export class GeminiAamosClient implements AamosClient {
|
|||||||
|
|
||||||
const inputTokens = geminiBody.usageMetadata?.promptTokenCount ?? 0;
|
const inputTokens = geminiBody.usageMetadata?.promptTokenCount ?? 0;
|
||||||
const outputTokens = geminiBody.usageMetadata?.candidatesTokenCount ?? 0;
|
const outputTokens = geminiBody.usageMetadata?.candidatesTokenCount ?? 0;
|
||||||
|
const totalTokens = geminiBody.usageMetadata?.totalTokenCount ?? 0;
|
||||||
const costUsd = this.estimateCostUsd(inputTokens, outputTokens);
|
const costUsd = this.estimateCostUsd(inputTokens, outputTokens);
|
||||||
await this.recordSpend(costUsd);
|
await this.recordSpend(costUsd);
|
||||||
|
|
||||||
@@ -409,6 +410,7 @@ export class GeminiAamosClient implements AamosClient {
|
|||||||
costUsd,
|
costUsd,
|
||||||
inputTokens,
|
inputTokens,
|
||||||
outputTokens,
|
outputTokens,
|
||||||
|
totalTokens,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -471,7 +473,7 @@ export class GeminiAamosClient implements AamosClient {
|
|||||||
|
|
||||||
const geminiBody = (await res.json()) as {
|
const geminiBody = (await res.json()) as {
|
||||||
candidates?: Array<{ content?: { parts?: Array<{ text?: string }> } }>;
|
candidates?: Array<{ content?: { parts?: Array<{ text?: string }> } }>;
|
||||||
usageMetadata?: { promptTokenCount?: number; candidatesTokenCount?: number };
|
usageMetadata?: { promptTokenCount?: number; candidatesTokenCount?: number; totalTokenCount?: number };
|
||||||
};
|
};
|
||||||
const text = geminiBody.candidates?.[0]?.content?.parts?.[0]?.text ?? "";
|
const text = geminiBody.candidates?.[0]?.content?.parts?.[0]?.text ?? "";
|
||||||
|
|
||||||
@@ -497,6 +499,7 @@ export class GeminiAamosClient implements AamosClient {
|
|||||||
|
|
||||||
const inputTokens = geminiBody.usageMetadata?.promptTokenCount ?? 0;
|
const inputTokens = geminiBody.usageMetadata?.promptTokenCount ?? 0;
|
||||||
const outputTokens = geminiBody.usageMetadata?.candidatesTokenCount ?? 0;
|
const outputTokens = geminiBody.usageMetadata?.candidatesTokenCount ?? 0;
|
||||||
|
const totalTokens = geminiBody.usageMetadata?.totalTokenCount ?? 0;
|
||||||
const costUsd = this.estimateCostUsd(inputTokens, outputTokens);
|
const costUsd = this.estimateCostUsd(inputTokens, outputTokens);
|
||||||
await this.recordSpend(costUsd);
|
await this.recordSpend(costUsd);
|
||||||
|
|
||||||
@@ -512,6 +515,7 @@ export class GeminiAamosClient implements AamosClient {
|
|||||||
costUsd,
|
costUsd,
|
||||||
inputTokens,
|
inputTokens,
|
||||||
outputTokens,
|
outputTokens,
|
||||||
|
totalTokens,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -642,7 +646,7 @@ export class GeminiAamosClient implements AamosClient {
|
|||||||
|
|
||||||
const geminiBody = (await res.json()) as {
|
const geminiBody = (await res.json()) as {
|
||||||
candidates?: Array<{ content?: { parts?: Array<{ text?: string }> } }>;
|
candidates?: Array<{ content?: { parts?: Array<{ text?: string }> } }>;
|
||||||
usageMetadata?: { promptTokenCount?: number; candidatesTokenCount?: number };
|
usageMetadata?: { promptTokenCount?: number; candidatesTokenCount?: number; totalTokenCount?: number };
|
||||||
};
|
};
|
||||||
const text = geminiBody.candidates?.[0]?.content?.parts?.[0]?.text ?? "";
|
const text = geminiBody.candidates?.[0]?.content?.parts?.[0]?.text ?? "";
|
||||||
|
|
||||||
@@ -666,6 +670,7 @@ export class GeminiAamosClient implements AamosClient {
|
|||||||
|
|
||||||
const inputTokens = geminiBody.usageMetadata?.promptTokenCount ?? 0;
|
const inputTokens = geminiBody.usageMetadata?.promptTokenCount ?? 0;
|
||||||
const outputTokens = geminiBody.usageMetadata?.candidatesTokenCount ?? 0;
|
const outputTokens = geminiBody.usageMetadata?.candidatesTokenCount ?? 0;
|
||||||
|
const totalTokens = geminiBody.usageMetadata?.totalTokenCount ?? 0;
|
||||||
const costUsd = this.estimateCostUsd(inputTokens, outputTokens);
|
const costUsd = this.estimateCostUsd(inputTokens, outputTokens);
|
||||||
await this.recordSpend(costUsd);
|
await this.recordSpend(costUsd);
|
||||||
|
|
||||||
@@ -688,6 +693,7 @@ export class GeminiAamosClient implements AamosClient {
|
|||||||
costUsd,
|
costUsd,
|
||||||
inputTokens,
|
inputTokens,
|
||||||
outputTokens,
|
outputTokens,
|
||||||
|
totalTokens,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user