| package assistantturn |
|
|
| import ( |
| "ds2api/internal/httpapi/openai/shared" |
| "ds2api/internal/sse" |
| ) |
|
|
| type StreamEventType string |
|
|
| const ( |
| StreamEventTextDelta StreamEventType = "text_delta" |
| StreamEventThinkingDelta StreamEventType = "thinking_delta" |
| StreamEventToolCall StreamEventType = "tool_call" |
| StreamEventDone StreamEventType = "done" |
| StreamEventError StreamEventType = "error" |
| StreamEventPing StreamEventType = "ping" |
| ) |
|
|
| type StreamEvent struct { |
| Type StreamEventType |
| Text string |
| Thinking string |
| ToolCall any |
| Error *OutputError |
| Usage *Usage |
| } |
|
|
| type Accumulator struct { |
| inner shared.StreamAccumulator |
| } |
|
|
| type AccumulatorOptions struct { |
| ThinkingEnabled bool |
| SearchEnabled bool |
| StripReferenceMarkers bool |
| } |
|
|
| func NewAccumulator(opts AccumulatorOptions) *Accumulator { |
| return &Accumulator{ |
| inner: shared.StreamAccumulator{ |
| ThinkingEnabled: opts.ThinkingEnabled, |
| SearchEnabled: opts.SearchEnabled, |
| StripReferenceMarkers: opts.StripReferenceMarkers, |
| }, |
| } |
| } |
|
|
| func (a *Accumulator) Apply(parsed sse.LineResult) shared.StreamAccumulatorResult { |
| if a == nil { |
| return shared.StreamAccumulatorResult{} |
| } |
| return a.inner.Apply(parsed) |
| } |
|
|
| func (a *Accumulator) Snapshot() (rawText, text, rawThinking, thinking, detectionThinking string) { |
| if a == nil { |
| return "", "", "", "", "" |
| } |
| return a.inner.RawText.String(), |
| a.inner.Text.String(), |
| a.inner.RawThinking.String(), |
| a.inner.Thinking.String(), |
| a.inner.ToolDetectionThinking.String() |
| } |
|
|