- Added support for stream lifecycle events including stream_start, stream_end, group_start, and group_end. - Introduced new data structures for handling lifecycle event data, enhancing communication of stream boundaries and metadata. - Updated the OpenAI provider to track and emit these events during streaming operations, improving UI/UX capabilities. - Added tests to validate the correct emission and order of lifecycle events during streaming.
47 lines
2 KiB
Go
47 lines
2 KiB
Go
package context
|
|
|
|
import "net/http"
|
|
|
|
// StreamChunkType represents the type of content in a streaming chunk
|
|
type StreamChunkType string
|
|
|
|
// Stream chunk type constants - indicates what type of content is in the current chunk
|
|
const (
|
|
// Content chunk types - actual data from the LLM
|
|
ChunkText StreamChunkType = "text" // Regular text content
|
|
ChunkThinking StreamChunkType = "thinking" // Reasoning/thinking content (o1, DeepSeek R1)
|
|
ChunkToolCall StreamChunkType = "tool_call" // Tool/function call
|
|
ChunkRefusal StreamChunkType = "refusal" // Model refusal
|
|
ChunkMetadata StreamChunkType = "metadata" // Metadata (usage, finish_reason, etc.)
|
|
ChunkError StreamChunkType = "error" // Error chunk
|
|
ChunkUnknown StreamChunkType = "unknown" // Unknown/unrecognized chunk type
|
|
|
|
// Lifecycle event types - stream and group boundaries
|
|
ChunkStreamStart StreamChunkType = "stream_start" // Stream begins (entire request starts)
|
|
ChunkStreamEnd StreamChunkType = "stream_end" // Stream ends (entire request completes)
|
|
ChunkGroupStart StreamChunkType = "group_start" // Message group begins (text/tool_call/thinking group starts)
|
|
ChunkGroupEnd StreamChunkType = "group_end" // Message group ends (text/tool_call/thinking group completes)
|
|
)
|
|
|
|
// StreamFunc the streaming function callback
|
|
// Parameters:
|
|
// - chunkType: the type of content in this chunk (text, thinking, tool_call, etc.)
|
|
// - data: the actual chunk data (could be text, JSON, or other format)
|
|
//
|
|
// Returns:
|
|
// - int: status code (0 = continue, non-zero = stop streaming)
|
|
type StreamFunc func(chunkType StreamChunkType, data []byte) int
|
|
|
|
// Writer is an alias for http.ResponseWriter interface used by an agent to construct a response.
|
|
// A Writer may not be used after the agent execution has completed.
|
|
type Writer = http.ResponseWriter
|
|
|
|
// Agent the agent interface
|
|
type Agent interface {
|
|
|
|
// Stream stream the agent
|
|
Stream(ctx *Context, messages []Message, handler StreamFunc) error
|
|
|
|
// Run run the agent
|
|
Run(ctx *Context, messages []Message) (*Response, error)
|
|
}
|