23 lines
907 B
TypeScript
23 lines
907 B
TypeScript
import type { Config } from "@/config"
|
|
import type { Provider } from "@/provider"
|
|
import { ProviderTransform } from "@/provider/transform"
|
|
import type { MessageV2 } from "."
|
|
|
|
const COMPACTION_BUFFER = 20_000
|
|
|
|
export function isOverflow(input: { cfg: Config.Info; tokens: MessageV2.Assistant["tokens"]; model: Provider.Model }) {
|
|
if (input.cfg.compaction?.auto === false) return false
|
|
const context = input.model.limit.context
|
|
if (context === 0) return false
|
|
|
|
const count =
|
|
input.tokens.total || input.tokens.input + input.tokens.output + input.tokens.cache.read + input.tokens.cache.write
|
|
|
|
const reserved =
|
|
input.cfg.compaction?.reserved ?? Math.min(COMPACTION_BUFFER, ProviderTransform.maxOutputTokens(input.model))
|
|
const usable = input.model.limit.input
|
|
? input.model.limit.input - reserved
|
|
: context - ProviderTransform.maxOutputTokens(input.model)
|
|
return count >= usable
|
|
}
|