session: remove resetElevation plumbing
Rate limiting is now time-based (leaky bucket in core/elevate), so per-turn reset hooks are no longer needed. Remove ResetElevation from session config, files.go, root.go, and main.go.
This commit is contained in:
parent
74f68f5045
commit
25dbc1b85c
1
go.mod
1
go.mod
|
|
@ -12,6 +12,7 @@ require (
|
||||||
|
|
||||||
require (
|
require (
|
||||||
golang.org/x/sys v0.47.0 // indirect
|
golang.org/x/sys v0.47.0 // indirect
|
||||||
|
golang.org/x/time v0.15.0 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
2
go.sum
2
go.sum
|
|
@ -45,6 +45,8 @@ golang.org/x/sys v0.0.0-20210415045647-66c3f260301c/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||||
golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs=
|
golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs=
|
||||||
golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
|
golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
|
golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U=
|
||||||
|
golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno=
|
||||||
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
|
|
|
||||||
5
main.go
5
main.go
|
|
@ -192,11 +192,6 @@ func runServer(sockPath string) {
|
||||||
Enable9P: !*no9p,
|
Enable9P: !*no9p,
|
||||||
EnableDBus: !*nodbus && (*no9p || *tcpAddr == ""),
|
EnableDBus: !*nodbus && (*no9p || *tcpAddr == ""),
|
||||||
InvalidateModels: modelCache.Invalidate,
|
InvalidateModels: modelCache.Invalidate,
|
||||||
ResetElevation: func(sessionID string) {
|
|
||||||
if elevateBroker != nil {
|
|
||||||
elevateBroker.ResetTurn(sessionID)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
OnSessionCreated: func(id string, sess *session.Session) {
|
OnSessionCreated: func(id string, sess *session.Session) {
|
||||||
if dbusAdapter != nil {
|
if dbusAdapter != nil {
|
||||||
dbusAdapter.OnSessionCreated(id, sess)
|
dbusAdapter.OnSessionCreated(id, sess)
|
||||||
|
|
|
||||||
19
main_test.go
19
main_test.go
|
|
@ -173,7 +173,6 @@ func newTestSessionFileStore(t *testing.T, sess *session.Session) *fs.Tree {
|
||||||
func(data []byte) error { return nil },
|
func(data []byte) error { return nil },
|
||||||
func() {},
|
func() {},
|
||||||
nil,
|
nil,
|
||||||
nil,
|
|
||||||
)
|
)
|
||||||
return sf
|
return sf
|
||||||
}
|
}
|
||||||
|
|
@ -182,7 +181,7 @@ func newTestSessionFileStoreWith(t *testing.T, sess *session.Session, kill func(
|
||||||
t.Helper()
|
t.Helper()
|
||||||
sink := testSink()
|
sink := testSink()
|
||||||
// Session tree for kill/rename/save operations
|
// Session tree for kill/rename/save operations
|
||||||
return session.NewSessionTree(sess, sink.NewLogger("test"), kill, rename, save, func() {}, nil, nil)
|
return session.NewSessionTree(sess, sink.NewLogger("test"), kill, rename, save, func() {}, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===== session.Session =====
|
// ===== session.Session =====
|
||||||
|
|
@ -400,7 +399,7 @@ func TestSessionFileStoreReadableContract(t *testing.T) {
|
||||||
defer sess.Cancel()
|
defer sess.Cancel()
|
||||||
sink := testSink()
|
sink := testSink()
|
||||||
_ = session.NewAgentTree(sess, sink.NewLogger("test"),
|
_ = session.NewAgentTree(sess, sink.NewLogger("test"),
|
||||||
func([]byte) error { return nil }, func() {}, nil, nil)
|
func([]byte) error { return nil }, func() {}, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSessionFileStoreList(t *testing.T) {
|
func TestSessionFileStoreList(t *testing.T) {
|
||||||
|
|
@ -408,7 +407,7 @@ func TestSessionFileStoreList(t *testing.T) {
|
||||||
defer sess.Cancel()
|
defer sess.Cancel()
|
||||||
sink := testSink()
|
sink := testSink()
|
||||||
sf := session.NewAgentTree(sess, sink.NewLogger("test"),
|
sf := session.NewAgentTree(sess, sink.NewLogger("test"),
|
||||||
func([]byte) error { return nil }, func() {}, nil, nil)
|
func([]byte) error { return nil }, func() {}, nil)
|
||||||
|
|
||||||
entries, err := sf.List()
|
entries, err := sf.List()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -425,7 +424,7 @@ func TestSessionFileStoreStatChat(t *testing.T) {
|
||||||
sess.AppendLog([]byte("hello"))
|
sess.AppendLog([]byte("hello"))
|
||||||
sink := testSink()
|
sink := testSink()
|
||||||
sf := session.NewAgentTree(sess, sink.NewLogger("test"),
|
sf := session.NewAgentTree(sess, sink.NewLogger("test"),
|
||||||
func([]byte) error { return nil }, func() {}, nil, nil)
|
func([]byte) error { return nil }, func() {}, nil)
|
||||||
|
|
||||||
fi, err := sf.Stat("chat")
|
fi, err := sf.Stat("chat")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -442,7 +441,7 @@ func TestSessionFileStoreGetChat(t *testing.T) {
|
||||||
sess.AppendLog([]byte("hello"))
|
sess.AppendLog([]byte("hello"))
|
||||||
sink := testSink()
|
sink := testSink()
|
||||||
sf := session.NewAgentTree(sess, sink.NewLogger("test"),
|
sf := session.NewAgentTree(sess, sink.NewLogger("test"),
|
||||||
func([]byte) error { return nil }, func() {}, nil, nil)
|
func([]byte) error { return nil }, func() {}, nil)
|
||||||
|
|
||||||
data := testStoreRead(t, sf, "chat")
|
data := testStoreRead(t, sf, "chat")
|
||||||
if string(data) != "hello" {
|
if string(data) != "hello" {
|
||||||
|
|
@ -455,7 +454,7 @@ func TestSessionFileStoreGetContent(t *testing.T) {
|
||||||
defer sess.Cancel()
|
defer sess.Cancel()
|
||||||
sink := testSink()
|
sink := testSink()
|
||||||
sf := session.NewAgentTree(sess, sink.NewLogger("test"),
|
sf := session.NewAgentTree(sess, sink.NewLogger("test"),
|
||||||
func([]byte) error { return nil }, func() {}, nil, nil)
|
func([]byte) error { return nil }, func() {}, nil)
|
||||||
|
|
||||||
for _, name := range []string{"cfg", "offset", "usage", "ctxsz", "models", "systemprompt"} {
|
for _, name := range []string{"cfg", "offset", "usage", "ctxsz", "models", "systemprompt"} {
|
||||||
if _, err := sf.Open(name); err != nil {
|
if _, err := sf.Open(name); err != nil {
|
||||||
|
|
@ -469,7 +468,7 @@ func TestSessionFileStorePutCwd(t *testing.T) {
|
||||||
defer sess.Cancel()
|
defer sess.Cancel()
|
||||||
sink := testSink()
|
sink := testSink()
|
||||||
sf := session.NewAgentTree(sess, sink.NewLogger("test"),
|
sf := session.NewAgentTree(sess, sink.NewLogger("test"),
|
||||||
func([]byte) error { return nil }, func() {}, nil, nil)
|
func([]byte) error { return nil }, func() {}, nil)
|
||||||
|
|
||||||
// Create the directory first so SetCWD validates it
|
// Create the directory first so SetCWD validates it
|
||||||
os.MkdirAll("/tmp/newpath", 0755)
|
os.MkdirAll("/tmp/newpath", 0755)
|
||||||
|
|
@ -485,7 +484,7 @@ func TestSessionFileStorePutEmpty(t *testing.T) {
|
||||||
defer sess.Cancel()
|
defer sess.Cancel()
|
||||||
sink := testSink()
|
sink := testSink()
|
||||||
sf := session.NewAgentTree(sess, sink.NewLogger("test"),
|
sf := session.NewAgentTree(sess, sink.NewLogger("test"),
|
||||||
func([]byte) error { return nil }, func() {}, nil, nil)
|
func([]byte) error { return nil }, func() {}, nil)
|
||||||
|
|
||||||
// Empty write is a no-op
|
// Empty write is a no-op
|
||||||
e, err := sf.Open("cfg")
|
e, err := sf.Open("cfg")
|
||||||
|
|
@ -592,7 +591,7 @@ func TestSessionFileStoreWriteChat(t *testing.T) {
|
||||||
var saved []byte
|
var saved []byte
|
||||||
sink := testSink()
|
sink := testSink()
|
||||||
sf := session.NewAgentTree(sess, sink.NewLogger("test"),
|
sf := session.NewAgentTree(sess, sink.NewLogger("test"),
|
||||||
func(data []byte) error { saved = data; return nil }, func() {}, nil, nil)
|
func(data []byte) error { saved = data; return nil }, func() {}, nil)
|
||||||
|
|
||||||
testStoreWrite(t, sf, "chat", []byte("transcript data"))
|
testStoreWrite(t, sf, "chat", []byte("transcript data"))
|
||||||
if string(saved) != "transcript data" {
|
if string(saved) != "transcript data" {
|
||||||
|
|
|
||||||
|
|
@ -63,8 +63,8 @@ func sessionFilePerms() map[string]os.FileMode {
|
||||||
return fs.Perms[fs.PathSessionFile].Files
|
return fs.Perms[fs.PathSessionFile].Files
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewSessionTree(sess *Session, log *olog.Logger, kill func(), rename func(newID string) error, saveTranscript func([]byte) error, invalidateModels func(), resetElevation func(), toolRegistry *toolsrv.Registry) *fs.Tree {
|
func NewSessionTree(sess *Session, log *olog.Logger, kill func(), rename func(newID string) error, saveTranscript func([]byte) error, invalidateModels func(), toolRegistry *toolsrv.Registry) *fs.Tree {
|
||||||
h := &sessionHelper{sess: sess, log: log, kill: kill, rename: rename, saveTranscript: saveTranscript, invalidateModels: invalidateModels, resetElevation: resetElevation, toolRegistry: toolRegistry}
|
h := &sessionHelper{sess: sess, log: log, kill: kill, rename: rename, saveTranscript: saveTranscript, invalidateModels: invalidateModels, toolRegistry: toolRegistry}
|
||||||
perms := sessionFilePerms()
|
perms := sessionFilePerms()
|
||||||
specs := make([]fs.FileSpec, len(SessionFileList))
|
specs := make([]fs.FileSpec, len(SessionFileList))
|
||||||
for i, f := range SessionFileList {
|
for i, f := range SessionFileList {
|
||||||
|
|
@ -76,8 +76,8 @@ func NewSessionTree(sess *Session, log *olog.Logger, kill func(), rename func(ne
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewAgentTree builds the file tree for a single agent within a session.
|
// NewAgentTree builds the file tree for a single agent within a session.
|
||||||
func NewAgentTree(sess *Session, log *olog.Logger, saveTranscript func([]byte) error, invalidateModels func(), resetElevation func(), toolRegistry *toolsrv.Registry) *fs.Tree {
|
func NewAgentTree(sess *Session, log *olog.Logger, saveTranscript func([]byte) error, invalidateModels func(), toolRegistry *toolsrv.Registry) *fs.Tree {
|
||||||
h := &sessionHelper{sess: sess, log: log, saveTranscript: saveTranscript, invalidateModels: invalidateModels, resetElevation: resetElevation, toolRegistry: toolRegistry}
|
h := &sessionHelper{sess: sess, log: log, saveTranscript: saveTranscript, invalidateModels: invalidateModels, toolRegistry: toolRegistry}
|
||||||
perms := sessionFilePerms()
|
perms := sessionFilePerms()
|
||||||
specs := make([]fs.FileSpec, len(AgentFileList))
|
specs := make([]fs.FileSpec, len(AgentFileList))
|
||||||
for i, f := range AgentFileList {
|
for i, f := range AgentFileList {
|
||||||
|
|
@ -96,7 +96,6 @@ type sessionHelper struct {
|
||||||
rename func(newID string) error
|
rename func(newID string) error
|
||||||
saveTranscript func([]byte) error
|
saveTranscript func([]byte) error
|
||||||
invalidateModels func()
|
invalidateModels func()
|
||||||
resetElevation func() // called on prompt write to reset turn counter
|
|
||||||
toolRegistry *toolsrv.Registry
|
toolRegistry *toolsrv.Registry
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -195,10 +194,6 @@ func (h *sessionHelper) fileSpec(name string, mode os.FileMode) fs.FileSpec {
|
||||||
h.sess.InvalidateModelsCache()
|
h.sess.InvalidateModelsCache()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
// Reset elevation rate limiter on new turn
|
|
||||||
if h.resetElevation != nil {
|
|
||||||
h.resetElevation()
|
|
||||||
}
|
|
||||||
h.sess.mu.Lock()
|
h.sess.mu.Lock()
|
||||||
h.sess.prevPrompt = []byte(input)
|
h.sess.prevPrompt = []byte(input)
|
||||||
h.sess.mu.Unlock()
|
h.sess.mu.Unlock()
|
||||||
|
|
|
||||||
|
|
@ -53,8 +53,6 @@ type Config struct {
|
||||||
EnableDBus bool
|
EnableDBus bool
|
||||||
// InvalidateModels clears the model cache, forcing a refresh.
|
// InvalidateModels clears the model cache, forcing a refresh.
|
||||||
InvalidateModels func()
|
InvalidateModels func()
|
||||||
// ResetElevation resets the per-turn elevation rate limiter for a session.
|
|
||||||
ResetElevation func(sessionID string)
|
|
||||||
// ToolRegistry is the shared tool registry for lazy tool promotion.
|
// ToolRegistry is the shared tool registry for lazy tool promotion.
|
||||||
ToolRegistry *toolsrv.Registry
|
ToolRegistry *toolsrv.Registry
|
||||||
// SkillsRegistry is the shared skills registry for skill loading.
|
// SkillsRegistry is the shared skills registry for skill loading.
|
||||||
|
|
@ -168,11 +166,6 @@ func lookupLocked(rs *rootState, id string) *Session {
|
||||||
}
|
}
|
||||||
|
|
||||||
func openSessionTree(rs *rootState, sess *Session) *fs.Tree {
|
func openSessionTree(rs *rootState, sess *Session) *fs.Tree {
|
||||||
var resetElev func()
|
|
||||||
if rs.cfg.ResetElevation != nil {
|
|
||||||
id := sess.id
|
|
||||||
resetElev = func() { rs.cfg.ResetElevation(id) }
|
|
||||||
}
|
|
||||||
return NewSessionTree(
|
return NewSessionTree(
|
||||||
sess,
|
sess,
|
||||||
rs.cfg.Log,
|
rs.cfg.Log,
|
||||||
|
|
@ -180,23 +173,16 @@ func openSessionTree(rs *rootState, sess *Session) *fs.Tree {
|
||||||
func(newID string) error { return Rename(rs, sess.id, newID) },
|
func(newID string) error { return Rename(rs, sess.id, newID) },
|
||||||
nil,
|
nil,
|
||||||
rs.cfg.InvalidateModels,
|
rs.cfg.InvalidateModels,
|
||||||
resetElev,
|
|
||||||
rs.cfg.ToolRegistry,
|
rs.cfg.ToolRegistry,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func openAgentTree(rs *rootState, sess *Session) *fs.Tree {
|
func openAgentTree(rs *rootState, sess *Session) *fs.Tree {
|
||||||
var resetElev func()
|
|
||||||
if rs.cfg.ResetElevation != nil {
|
|
||||||
id := sess.id
|
|
||||||
resetElev = func() { rs.cfg.ResetElevation(id) }
|
|
||||||
}
|
|
||||||
return NewAgentTree(
|
return NewAgentTree(
|
||||||
sess,
|
sess,
|
||||||
rs.cfg.Log,
|
rs.cfg.Log,
|
||||||
nil,
|
nil,
|
||||||
rs.cfg.InvalidateModels,
|
rs.cfg.InvalidateModels,
|
||||||
resetElev,
|
|
||||||
rs.cfg.ToolRegistry,
|
rs.cfg.ToolRegistry,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Reference in New Issue