fix(hooks): use actual context window token counts
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -86,8 +86,8 @@ describe("context-window-monitor modelContextLimitsCache", () => {
|
||||
|
||||
// then
|
||||
expect(output.output).toContain("context remaining")
|
||||
expect(output.output).toContain("524,288-token context window")
|
||||
expect(output.output).toContain("[Context Status: 72.5% used (380,000/524,288 tokens), 27.5% remaining]")
|
||||
expect(output.output).toContain("262,144-token context window")
|
||||
expect(output.output).toContain("[Context Status: 72.5% used (190,000/262,144 tokens), 27.5% remaining]")
|
||||
expect(output.output).not.toContain("1,000,000")
|
||||
})
|
||||
|
||||
@@ -215,9 +215,8 @@ describe("context-window-monitor modelContextLimitsCache", () => {
|
||||
const output = createOutput()
|
||||
await hook["tool.execute.after"]({ tool: "bash", sessionID, callID: "call_1" }, output)
|
||||
|
||||
// then — 360K/500K = 72%, above 70% threshold, uses cached 500K limit
|
||||
expect(output.output).toContain("context remaining")
|
||||
expect(output.output).toContain("1,000,000-token context window")
|
||||
expect(output.output).toContain("500,000-token context window")
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -262,7 +261,7 @@ describe("context-window-monitor modelContextLimitsCache", () => {
|
||||
|
||||
// then
|
||||
expect(output.output).toContain("context remaining")
|
||||
expect(output.output).toContain("400,000-token context window")
|
||||
expect(output.output).toContain("200,000-token context window")
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -106,7 +106,7 @@ describe("context-window-monitor", () => {
|
||||
// #given token usage exceeds 70% threshold
|
||||
// #when tool.execute.after is called
|
||||
// #then context reminder should be appended to output
|
||||
it("should append context reminder with doubled displayed counts when usage exceeds threshold", async () => {
|
||||
it("should append context reminder with actual token counts when usage exceeds threshold", async () => {
|
||||
const hook = createContextWindowMonitorHook(ctx as never)
|
||||
const sessionID = "ses_high_usage"
|
||||
|
||||
@@ -138,8 +138,8 @@ describe("context-window-monitor", () => {
|
||||
)
|
||||
|
||||
expect(output.output).toContain("context remaining")
|
||||
expect(output.output).toContain("400,000-token context window")
|
||||
expect(output.output).toContain("[Context Status: 80.0% used (320,000/400,000 tokens), 20.0% remaining]")
|
||||
expect(output.output).toContain("200,000-token context window")
|
||||
expect(output.output).toContain("[Context Status: 80.0% used (160,000/200,000 tokens), 20.0% remaining]")
|
||||
expect(ctx.client.session.messages).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
|
||||
@@ -6,14 +6,9 @@ import {
|
||||
import { createSystemDirective, SystemDirectiveTypes } from "../shared/system-directive"
|
||||
|
||||
const CONTEXT_WARNING_THRESHOLD = 0.70
|
||||
const DISPLAY_TOKEN_COUNT_MULTIPLIER = 2
|
||||
|
||||
function toDisplayTokenCount(actualTokenCount: number): number {
|
||||
return actualTokenCount * DISPLAY_TOKEN_COUNT_MULTIPLIER
|
||||
}
|
||||
|
||||
function createContextReminder(actualLimit: number): string {
|
||||
const limitTokens = toDisplayTokenCount(actualLimit).toLocaleString()
|
||||
const limitTokens = actualLimit.toLocaleString()
|
||||
|
||||
return `${createSystemDirective(SystemDirectiveTypes.CONTEXT_WINDOW_MONITOR)}
|
||||
|
||||
@@ -72,8 +67,8 @@ export function createContextWindowMonitorHook(
|
||||
|
||||
const usedPct = (actualUsagePercentage * 100).toFixed(1)
|
||||
const remainingPct = ((1 - actualUsagePercentage) * 100).toFixed(1)
|
||||
const usedTokens = toDisplayTokenCount(totalInputTokens).toLocaleString()
|
||||
const limitTokens = toDisplayTokenCount(actualLimit).toLocaleString()
|
||||
const usedTokens = totalInputTokens.toLocaleString()
|
||||
const limitTokens = actualLimit.toLocaleString()
|
||||
|
||||
output.output += `\n\n${createContextReminder(actualLimit)}
|
||||
[Context Status: ${usedPct}% used (${usedTokens}/${limitTokens} tokens), ${remainingPct}% remaining]`
|
||||
|
||||
Reference in New Issue
Block a user