@@ -11,6 +11,7 @@ import (
1111 "github.com/docker/docker-agent/pkg/compaction"
1212 "github.com/docker/docker-agent/pkg/model/provider"
1313 "github.com/docker/docker-agent/pkg/model/provider/options"
14+ "github.com/docker/docker-agent/pkg/modelsdev"
1415 "github.com/docker/docker-agent/pkg/session"
1516 "github.com/docker/docker-agent/pkg/team"
1617)
@@ -26,7 +27,9 @@ const maxKeepTokens = 20_000
2627// persistence, token count updates). The agent is used to extract the
2728// conversation from the session and to obtain the model for summarization.
2829func (r * LocalRuntime ) doCompact (ctx context.Context , sess * session.Session , a * agent.Agent , additionalPrompt string , events chan Event ) {
29- slog .Debug ("Generating summary for session" , "session_id" , sess .ID )
30+ lg := slog .With ("session_id" , sess .ID , "agent" , a .Name (), "action" , "compaction" )
31+
32+ lg .Debug ("Generating summary for session" )
3033 events <- SessionCompaction (sess .ID , "started" , a .Name ())
3134 defer func () {
3235 events <- SessionCompaction (sess .ID , "completed" , a .Name ())
@@ -37,10 +40,32 @@ func (r *LocalRuntime) doCompact(ctx context.Context, sess *session.Session, a *
3740 options .WithStructuredOutput (nil ),
3841 options .WithMaxTokens (maxSummaryTokens ),
3942 )
43+
4044 m , err := r .modelsStore .GetModel (ctx , summaryModel .ID ())
45+ if err != nil && errors .Is (err , modelsdev .ErrProviderNotFound ) {
46+ lg .Debug ("Provider not found; attempting to find by model name" , "error" , err )
47+
48+ db , dberr := r .modelsStore .GetDatabase (ctx )
49+ if dberr != nil {
50+ lg .Error ("Provider not found and failed to find by model name" , "error" , dberr )
51+ events <- Error ("Failed to get db to find model definition: " + dberr .Error ())
52+ return
53+ }
54+
55+ // Find the lowest context limit for this model, regardless of the provider.
56+ for _ , provider := range db .Providers {
57+ if v , ok := provider .Models [summaryModel .BaseConfig ().ModelConfig .Model ]; ok {
58+ if m == nil || v .Limit .Context < m .Limit .Context {
59+ m = & v
60+ err = nil
61+ }
62+ }
63+ }
64+ }
65+
4166 if err != nil {
42- slog .Error ("Failed to generate session summary" , "error" , errors . New ( "failed to get model definition" ) )
43- events <- Error ("Failed to get model definition" )
67+ lg .Error ("Failed to get model definition to generate session summary" , "error" , err )
68+ events <- Error ("Failed to get model definition: " + err . Error () )
4469 return
4570 }
4671
@@ -58,12 +83,12 @@ func (r *LocalRuntime) doCompact(ctx context.Context, sess *session.Session, a *
5883 t := team .New (team .WithAgents (compactionAgent ))
5984 rt , err := New (t , WithSessionCompaction (false ))
6085 if err != nil {
61- slog .Error ("Failed to generate session summary" , "error" , err )
86+ lg .Error ("Failed to generate session summary" , "error" , err )
6287 events <- Error (err .Error ())
6388 return
6489 }
6590 if _ , err = rt .Run (ctx , compactionSession ); err != nil {
66- slog .Error ("Failed to generate session summary" , "error" , err )
91+ lg .Error ("Failed to generate session summary" , "error" , err )
6792 events <- Error (err .Error ())
6893 return
6994 }
@@ -83,7 +108,7 @@ func (r *LocalRuntime) doCompact(ctx context.Context, sess *session.Session, a *
83108 })
84109 _ = r .sessionStore .UpdateSession (ctx , sess )
85110
86- slog .Debug ("Generated session summary" , "session_id" , sess . ID , "summary_length" , len (summary ))
111+ lg .Debug ("Generated session summary" , "summary_length" , len (summary ))
87112 events <- SessionSummary (sess .ID , summary , a .Name (), firstKeptEntry )
88113}
89114
0 commit comments