Add reasoning streaming

This commit is contained in:
dwrz
2026-06-26 18:03:43 +00:00
parent 42f27f3f6b
commit d21ed0dd4d
3 changed files with 55 additions and 10 deletions

View File

@@ -177,18 +177,21 @@ func (c *Client) completions(
// StreamEvent wraps a message or delta produced during streaming.
type StreamEvent struct {
// Type identifies the event kind: delta, done, or message.
// Type identifies the event kind: delta, reasoning_delta, done, or message.
Type string
// Delta is a text fragment from the assistant response.
Delta string
// ReasoningDelta is a reasoning text fragment from the assistant response.
ReasoningDelta string
// Message is the complete chat completion message.
Message Message
}
const (
streamEventDelta = "delta"
streamEventDone = "done"
streamEventMessage = "message"
streamEventDelta = "delta"
streamEventReasoningDelta = "reasoning_delta"
streamEventDone = "done"
streamEventMessage = "message"
)
// CompletionsStream sends messages to the LLM using the specified model and
@@ -403,6 +406,10 @@ func (c *Client) completionsStream(ctx context.Context, messages []Message, mode
acc.reasoning.WriteString(
delta.ReasoningContent,
)
events <- StreamEvent{
Type: streamEventReasoningDelta,
ReasoningDelta: delta.ReasoningContent,
}
}
// Accumulate tool call deltas by index.
for _, tc := range delta.ToolCalls {