This commit is contained in:
Aiden Cline
2026-02-09 18:40:08 -06:00
parent 31f893f8cb
commit 3e0b40039c
4 changed files with 19 additions and 5 deletions

View File

@@ -32,6 +32,11 @@ export namespace SessionCompaction {
if (config.compaction?.auto === false) return false
const context = input.model.limit.context
if (context === 0) return false
const usageTokens =
input.tokens.total ||
input.tokens.input + input.tokens.output + input.tokens.cache.read + input.tokens.cache.write
const count = input.tokens.input + input.tokens.cache.read + input.tokens.output
const output = Math.min(input.model.limit.output, SessionPrompt.OUTPUT_TOKEN_MAX) || SessionPrompt.OUTPUT_TOKEN_MAX
const usable = input.model.limit.input || context - output

View File

@@ -22,6 +22,7 @@ import { Snapshot } from "@/snapshot"
import type { Provider } from "@/provider/provider"
import { PermissionNext } from "@/permission/next"
import { Global } from "@/global"
import type { LanguageModelV2Usage } from "@ai-sdk/provider"
export namespace Session {
const log = Log.create({ service: "session" })
@@ -439,10 +440,15 @@ export namespace Session {
export const getUsage = fn(
z.object({
model: z.custom<Provider.Model>(),
usage: z.custom<LanguageModelUsage>(),
usage: z.custom<LanguageModelV2Usage>(),
metadata: z.custom<ProviderMetadata>().optional(),
}),
(input) => {
const inputTokens = input.usage.inputTokens ?? 0
const outputTokens = input.usage.outputTokens ?? 0
const reasoningTokens = input.usage.reasoningTokens ?? 0
// input.usage.
const cacheReadInputTokens = input.usage.cachedInputTokens ?? 0
const cacheWriteInputTokens = (input.metadata?.["anthropic"]?.["cacheCreationInputTokens"] ??
// @ts-expect-error
@@ -453,17 +459,18 @@ export namespace Session {
const excludesCachedTokens = !!(input.metadata?.["anthropic"] || input.metadata?.["bedrock"])
const adjustedInputTokens = excludesCachedTokens
? (input.usage.inputTokens ?? 0)
: (input.usage.inputTokens ?? 0) - cacheReadInputTokens - cacheWriteInputTokens
? inputTokens
: inputTokens - cacheReadInputTokens - cacheWriteInputTokens
const safe = (value: number) => {
if (!Number.isFinite(value)) return 0
return value
}
const tokens = {
total: input.usage.totalTokens,
input: safe(adjustedInputTokens),
output: safe(input.usage.outputTokens ?? 0),
reasoning: safe(input.usage?.reasoningTokens ?? 0),
output: safe(outputTokens),
reasoning: safe(reasoningTokens),
cache: {
write: safe(cacheWriteInputTokens),
read: safe(cacheReadInputTokens),

View File

@@ -383,6 +383,7 @@ export namespace MessageV2 {
summary: z.boolean().optional(),
cost: z.number(),
tokens: z.object({
total: z.number().optional(),
input: z.number(),
output: z.number(),
reasoning: z.number(),

View File

@@ -203,6 +203,7 @@ export type AssistantMessage = {
summary?: boolean
cost: number
tokens: {
total?: number
input: number
output: number
reasoning: number