返回 DeepSeek-Reasonix
provider_diagnostic_turn.go
根目录 / internal / control / provider_diagnostic_turn.go
1 package control
2
3 type providerDiagnosticTurn struct {
4 id string
5 dropped uint64
6 }
7
8 // Track bounded turn summaries independently of retained requests so a turn
9 // whose requests were all evicted still reports loss. Older metadata is unknown.
10 func (c *Controller) beginProviderDiagnosticTurn(turnID string) {
11 b := &c.providerDiagnostics
12 b.mu.Lock()
13 defer b.mu.Unlock()
14 for _, turn := range b.turns {
15 if turn.id == turnID {
16 return
17 }
18 }
19 if len(b.turns) == 128 {
20 copy(b.turns, b.turns[1:])
21 b.turns = b.turns[:127]
22 }
23 b.turns = append(b.turns, providerDiagnosticTurn{id: turnID})
24 }
25
26 func (c *Controller) providerDiagnosticTurnSnapshot(turnID string) ([]providerDiagnostic, *uint64, bool) {
27 b := &c.providerDiagnostics
28 b.mu.Lock()
29 defer b.mu.Unlock()
30 requests := []providerDiagnostic{}
31 for _, request := range b.requests {
32 if turnID != "" && request.TurnID == turnID {
33 requests = append(requests, request)
34 }
35 }
36 for _, turn := range b.turns {
37 if turn.id == turnID && turnID != "" {
38 dropped := turn.dropped
39 return requests, &dropped, dropped > 0
40 }
41 }
42 return requests, nil, true
43 }
44
44 lines GO