1
0
Files
nex/backend/internal/conversion/canonical/stream.go
lanyuanxiaoyao 4c6b49099d feat: 配置 golangci-lint 静态分析并修复存量违规
- 新增 backend/.golangci.yml 配置 12 个 linter(forbidigo、errorlint、errcheck、staticcheck、revive、gocritic、gosec、bodyclose、noctx、nilerr、goimports、gocyclo)
- 新增 lefthook.yml 配置 pre-commit hook 自动运行 lint
- 修复存量代码违规:errors.Is/As 替换、zap.Error 替换、import 排序、errcheck 修复
- 更新 README 补充编码规范说明
- 归档 backend-code-lint 变更
2026-04-24 13:01:48 +08:00

157 lines
4.5 KiB
Go

package canonical
// StreamEventType 流式事件类型枚举
type StreamEventType string
const (
EventMessageStart StreamEventType = "message_start"
EventContentBlockStart StreamEventType = "content_block_start"
EventContentBlockDelta StreamEventType = "content_block_delta"
EventContentBlockStop StreamEventType = "content_block_stop"
EventMessageDelta StreamEventType = "message_delta"
EventMessageStop StreamEventType = "message_stop"
EventError StreamEventType = "error"
EventPing StreamEventType = "ping"
)
// DeltaType 增量类型枚举
type DeltaType string
const (
DeltaTypeText DeltaType = "text_delta"
DeltaTypeInputJSON DeltaType = "input_json_delta"
DeltaTypeThinking DeltaType = "thinking_delta"
)
// StreamDelta 流式增量联合体
type StreamDelta struct {
Type string `json:"type"`
Text string `json:"text,omitempty"`
PartialJSON string `json:"partial_json,omitempty"`
Thinking string `json:"thinking,omitempty"`
}
// StreamContentBlock 流式内容块联合体
type StreamContentBlock struct {
Type string `json:"type"`
Text string `json:"text,omitempty"`
ID string `json:"id,omitempty"`
Name string `json:"name,omitempty"`
Thinking string `json:"thinking,omitempty"`
}
// CanonicalStreamEvent 规范流式事件联合体
type CanonicalStreamEvent struct {
Type StreamEventType `json:"type"`
// MessageStartEvent
Message *StreamMessage `json:"message,omitempty"`
// ContentBlockStartEvent / ContentBlockDeltaEvent / ContentBlockStopEvent
Index *int `json:"index,omitempty"`
ContentBlock *StreamContentBlock `json:"content_block,omitempty"`
Delta *StreamDelta `json:"delta,omitempty"`
// MessageDeltaEvent
StopReason *StopReason `json:"stop_reason,omitempty"`
Usage *CanonicalUsage `json:"usage,omitempty"`
// ErrorEvent
Error *StreamError `json:"error,omitempty"`
}
// StreamMessage 流式消息摘要
type StreamMessage struct {
ID string `json:"id"`
Model string `json:"model"`
Usage *CanonicalUsage `json:"usage,omitempty"`
}
// StreamError 流式错误
type StreamError struct {
Type string `json:"type"`
Message string `json:"message"`
}
// NewMessageStartEvent 创建消息开始事件
func NewMessageStartEvent(id, model string) CanonicalStreamEvent {
return CanonicalStreamEvent{
Type: EventMessageStart,
Message: &StreamMessage{ID: id, Model: model},
}
}
// NewMessageStartEventWithUsage 创建带用量的消息开始事件
func NewMessageStartEventWithUsage(id, model string, usage *CanonicalUsage) CanonicalStreamEvent {
return CanonicalStreamEvent{
Type: EventMessageStart,
Message: &StreamMessage{ID: id, Model: model, Usage: usage},
}
}
// NewContentBlockStartEvent 创建内容块开始事件
func NewContentBlockStartEvent(index int, block StreamContentBlock) CanonicalStreamEvent {
idx := index
return CanonicalStreamEvent{
Type: EventContentBlockStart,
Index: &idx,
ContentBlock: &block,
}
}
// NewContentBlockDeltaEvent 创建内容块增量事件
func NewContentBlockDeltaEvent(index int, delta StreamDelta) CanonicalStreamEvent {
idx := index
return CanonicalStreamEvent{
Type: EventContentBlockDelta,
Index: &idx,
Delta: &delta,
}
}
// NewContentBlockStopEvent 创建内容块结束事件
func NewContentBlockStopEvent(index int) CanonicalStreamEvent {
idx := index
return CanonicalStreamEvent{
Type: EventContentBlockStop,
Index: &idx,
}
}
// NewMessageDeltaEvent 创建消息增量事件
func NewMessageDeltaEvent(stopReason StopReason) CanonicalStreamEvent {
sr := stopReason
return CanonicalStreamEvent{
Type: EventMessageDelta,
StopReason: &sr,
}
}
// NewMessageDeltaEventWithUsage 创建带用量的消息增量事件
func NewMessageDeltaEventWithUsage(stopReason StopReason, usage *CanonicalUsage) CanonicalStreamEvent {
sr := stopReason
return CanonicalStreamEvent{
Type: EventMessageDelta,
StopReason: &sr,
Usage: usage,
}
}
// NewMessageStopEvent 创建消息结束事件
func NewMessageStopEvent() CanonicalStreamEvent {
return CanonicalStreamEvent{Type: EventMessageStop}
}
// NewErrorEvent 创建错误事件
func NewErrorEvent(errType, message string) CanonicalStreamEvent {
return CanonicalStreamEvent{
Type: EventError,
Error: &StreamError{Type: errType, Message: message},
}
}
// NewPingEvent 创建心跳事件
func NewPingEvent() CanonicalStreamEvent {
return CanonicalStreamEvent{Type: EventPing}
}