返回 DeepSeek-Reasonix
background_replacement.go
根目录 / internal / acp / background_replacement.go
1 package acp
2
3 import (
4 "context"
5 "reasonix/internal/control"
6 )
7
8 func modelOnlyConfigDeltas(deltas []sessionConfigDelta) bool {
9 if len(deltas) == 0 {
10 return false
11 }
12 for _, d := range deltas {
13 if d.axis != "model" {
14 return false
15 }
16 }
17 return true
18 }
19
20 func configBackgroundBlocked(ctrl acpController, modelOnly bool) bool {
21 return !modelOnly || control.ModelReplacementBlocked(ctrl)
22 }
23
24 func (s *service) buildConfigReplacement(ctx context.Context, old acpController, params SessionParams, modelOnly bool) (*control.Controller, error) {
25 finish, abort := func(*control.Controller) error { return nil }, func() {}
26 if modelOnly {
27 if c, ok := old.(*control.Controller); ok {
28 params.SessionTemp, params.PersistentShell = c.SessionTemp(), c.PersistentShell()
29 }
30 var err error
31 params.BackgroundScope, finish, abort, err = control.ReserveBackgroundReplacement(old)
32 if err != nil {
33 return nil, err
34 }
35 }
36 defer abort()
37 next, err := s.factory.NewSession(ctx, params)
38 if err != nil {
39 return nil, err
40 }
41 if err := finish(next); err != nil {
42 next.ReleaseResources()
43 return nil, err
44 }
45 return next, nil
46 }
47
47 lines GO