yao/agent/llm/handlers/stream.go
Max f2099babd9 Update Go module dependencies and enhance assistant context management
- Upgraded Go version to 1.25 and updated several dependencies, including `testify` to v1.11.1 and added new indirect dependencies for JSON schema validation.
- Refactored the assistant's context management to utilize a new `context.Uses` structure, improving the handling of vision, audio, search, and fetch configurations.
- Enhanced the assistant's request building process to support new response formats, including JSON schema validation, ensuring better integration with various tools and services.
2025-11-15 10:05:57 +08:00

63 lines
2 KiB
Go

package handlers
import (
"github.com/yaoapp/yao/agent/context"
)
// DefaultStreamHandler creates a default stream handler that sends messages via context
// This handler is used when no custom handler is provided
func DefaultStreamHandler(ctx *context.Context) context.StreamFunc {
return func(chunkType context.StreamChunkType, data []byte) int {
// TODO: Implement default stream handling
// - Parse streaming chunk data based on chunkType
// - Extract content from chunk
// - Send message via ctx (SSE, WebSocket, etc.)
// - Handle different chunk types (text, thinking, tool_calls, etc.)
// - Return 0 to continue streaming, non-zero to stop
switch chunkType {
case context.ChunkText:
// Handle text content
case context.ChunkThinking:
// Handle reasoning/thinking content
case context.ChunkToolCall:
// Handle tool calls
case context.ChunkMetadata:
// Handle metadata (usage, finish_reason)
case context.ChunkError:
// Handle error
return 1 // Stop on error
}
return 0 // Continue streaming
}
}
// SendStreamChunk sends a stream chunk via context
// Used internally by DefaultStreamHandler
func SendStreamChunk(ctx *context.Context, chunkType context.StreamChunkType, data []byte) error {
// TODO: Implement sending stream chunk
// - Format chunk for transport (SSE, WebSocket)
// - Send via ctx's connection
// - Handle errors and retries
return nil
}
// FormatSSE formats streaming data as Server-Sent Events format
func FormatSSE(chunkType context.StreamChunkType, data []byte) string {
// TODO: Implement SSE formatting
// - Format as "data: {...}\n\n"
// - Include chunk type in the message
// - Handle special cases (done, error)
// - Ensure proper JSON encoding
return ""
}
// FormatWebSocket formats streaming data as WebSocket message
func FormatWebSocket(chunkType context.StreamChunkType, data []byte) []byte {
// TODO: Implement WebSocket formatting
// - Format as JSON message with chunk type
// - Add message type/metadata
// - Handle binary vs text frames
return nil
}