mirror of
https://github.com/RuoJi6/ARTEX.git
synced 2026-10-28 01:03:50 +08:00
feat(settings): 增加实验功能开关,可开启 noa 上下文压缩
系统设置新增「实验功能」区块,内含 noa 模型驱动上下文压缩开关(默认关)。 开启后平台接入的四类 agent(planner / worker / 主 agent / 对话)由 noa 接管 上下文压缩,取代内置 compaction;关闭即恢复内置压缩。 - agent: 新增 enableNoa 共享接入器(noaadapter.Enable 唯一入口,all-or-nothing), 四类 agent 各加 noaEnabledFn 解析器 + SetNoaEnabled,每 run 读一次,切换只影响 之后启动的 run,无需重建 agent。归档落在各 agent 本 run 工作目录下(任务级持久), session id 与 transcript 同规则。启用失败经 onWarn 上报并回退内置压缩,不中断任务。 - server: settings key noa_compaction + Manager 读写;8 处 agent 装配点注入平台级 解析器(server 5 + task_llm 3);GET/PUT /api/settings 增加字段。 - web: 系统设置页新增实验功能卡片与开关(乐观更新、失败回滚),类型与 mock 补字段。 官方默认行为不变:开关默认关闭时 noaadapter.Enable 不被调用,内置 compaction 原样工作。
This commit is contained in:
1 parent
4ae319feca
commit
865d52267d
11 files changed
+177
-1
No files matched your search
@@ -77,6 +77,10 @@ type Worker struct {
|
||||
// path. Read per run so a profile/task toggle takes effect without rebuilding
|
||||
// the agent. nil = streaming (default).
|
||||
nonStreamingFn func() bool
|
||||
// noaEnabledFn resolves whether this run uses the experimental noa context-
|
||||
// compression mechanism. Read per run, like nonStreaming. nil = off (built-in
|
||||
// compaction).
|
||||
noaEnabledFn func() bool
|
||||
// maxTokensFn resolves the per-reply output cap in tokens, on the same
|
||||
// per-run basis. nil or 0 = send no cap and let the endpoint decide.
|
||||
maxTokensFn func() int
|
||||
@@ -113,6 +117,11 @@ func (w *Worker) SetNonStreaming(fn func() bool) { w.nonStreamingFn = fn }
|
||||
|
||||
func (w *Worker) nonStreaming() bool { return w.nonStreamingFn != nil && w.nonStreamingFn() }
|
||||
|
||||
// SetNoaEnabled wires a resolver deciding whether runs use the experimental noa
|
||||
// context-compression mechanism. nil/unset = off (built-in compaction). Read per
|
||||
// run so the settings toggle takes effect without rebuilding the agent.
|
||||
func (w *Worker) SetNoaEnabled(fn func() bool) { w.noaEnabledFn = fn }
|
||||
|
||||
// SetMaxTokens wires a resolver for the per-reply output cap. nil/unset or 0 =
|
||||
// send no cap and let the endpoint decide. Read per run, like nonStreaming.
|
||||
func (w *Worker) SetMaxTokens(fn func() int) { w.maxTokensFn = fn }
|
||||
@@ -478,6 +487,9 @@ func (w *Worker) execute(ctx context.Context, name string, taskID int64, as *db.
|
||||
input = "开始执行 system 里领到的意图:只做它、只产生事实、assets、finding、做完即停。"
|
||||
}
|
||||
|
||||
// 实验功能:开启后由 noa 接管上下文压缩(归档落在本意图 runDir 下,任务级持久)。
|
||||
noaSession := WorkerSessionID(ts.ID(), intent.ID)
|
||||
enableNoa(&opts, w.noaEnabledFn, runDir, noaSession, noaWarn(noaSession))
|
||||
ctx = attachSideCapture(ctx, &opts)
|
||||
s := agentcore.NewSession(opts)
|
||||
defer s.Close() // release the session's background-task manager (temp dir + processes)
|
||||
|
||||
Reference in new issue
Block a user