Files
AutoZero/agent/context_usage_test.go
Sakurasan d5dac5a6fc feat: AutoZero 通用 Agent 框架(从 AutoGo 五阶段拆分完成)
llm(三协议 Provider)/ session(JSONL 持久化)/ tools(Registry、围栏、
builtin、computer)/ cdp(browser)/ skills / mcp / agent(循环、两级压缩、
编排、审批门控)+ 底座 jsonl/textx/execx/diag/scratch/spill/imagecache。

产品装配代码(config 桥接、schedule 工具、memory/plan/retro/prompt)
留在 AutoGo,宿主接入方式见 MIGRATION.md。
2026-10-26 00:54:46 +08:00

49 lines
1.7 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package agent
import (
"strings"
"testing"
"git.gopher.ink/mirrors2/AutoZero/llm"
"git.gopher.ink/mirrors2/AutoZero/session"
)
// TestContextUsage:上下文占用估算与 shouldCompact 同口径,
// 返回 (used, window, compactAt) 三元组供 UI 徽标换算百分比。
func TestContextUsage(t *testing.T) {
a := &Agent{
System: strings.Repeat("s", 300), // sysNow 计入 system 提示
Session: &session.Session{Messages: []llm.Message{
{Role: llm.RoleUser, Content: strings.Repeat("a", 3000)}, // ≈ 1000 tokens(字节/3)
}},
ContextWindow: 1000,
CompactAt: 0.85,
MinCompactTokens: 10,
}
used, window, at := a.ContextUsage()
if window != 1000 || at != 0.85 {
t.Fatalf("window/compactAt = %d/%v, want 1000/0.85", window, at)
}
// 300 字节 system(100)+ 3000 字节消息(1000)+ 每条 8 字节固定开销。
if used < 1000 || used > 1200 {
t.Fatalf("used = %d, want ≈1100", used)
}
}
// TestOnCompactCallback:自动压缩完成后回调一次结果(OnCompact 非空时)。
// 压缩路径依赖 LLM 调用,这里只验证回调契约——手动 CompactNow 的结果
// 结构与自动路径共用同一 CompactionResult,事件桥(TUI compactHub)按
// 同一字段渲染。
func TestOnCompactCallbackField(t *testing.T) {
var got []CompactionResult
a := &Agent{}
a.Opt.OnCompact = func(res CompactionResult) { got = append(got, res) }
if a.Opt.OnCompact == nil {
t.Fatal("OnCompact should be assignable")
}
a.Opt.OnCompact(CompactionResult{Summarized: 3, Kept: 10, TokensBefore: 100, TokensAfter: 40})
if len(got) != 1 || got[0].Summarized != 3 || got[0].TokensAfter != 40 {
t.Fatalf("callback not invoked with payload: %+v", got)
}
}