package models import "time" // Session 会话。 type Session struct { ID string `json:"session_id"` CreatedAt time.Time `json:"created_at"` Config SessionConfig `json:"config"` } // SessionConfig 会话配置。 type SessionConfig struct { TTSEnabled bool `json:"tts_enabled"` DetailLevel string `json:"detail_level"` // "low" | "high" Language string `json:"language"` } // DefaultConfig 默认会话配置。 func DefaultConfig() SessionConfig { return SessionConfig{TTSEnabled: true, DetailLevel: "low", Language: "zh-CN"} } // SessionConfigPatch 会话配置增量更新(指针字段表示"未传则不更新")。 type SessionConfigPatch struct { TTSEnabled *bool `json:"tts_enabled,omitempty"` DetailLevel *string `json:"detail_level,omitempty"` Language *string `json:"language,omitempty"` } // Apply 将 patch 中的非 nil 字段覆盖到 cfg。 func (p SessionConfigPatch) Apply(cfg *SessionConfig) { if p.TTSEnabled != nil { cfg.TTSEnabled = *p.TTSEnabled } if p.DetailLevel != nil { cfg.DetailLevel = *p.DetailLevel } if p.Language != nil { cfg.Language = *p.Language } } // Message 对话消息。 type Message struct { Role string `json:"role"` // "user" | "assistant" Content string `json:"content"` } // --- WebSocket 消息 --- // WsQuery 客户端 query 消息。 type WsQuery struct { Type string `json:"type"` RequestID string `json:"request_id"` Image string `json:"image"` // base64 Audio string `json:"audio"` // base64 Text string `json:"text"` // 用户手动输入的文本(有值时跳过 STT) MimeType string `json:"mime_type"` // 默认 "audio/pcm" } // WsConfig 客户端 config 消息。 type WsConfig struct { Type string `json:"type"` Payload struct { TTSEnabled *bool `json:"tts_enabled,omitempty"` DetailLevel *string `json:"detail_level,omitempty"` Language *string `json:"language,omitempty"` } `json:"payload"` } // WsConnected 服务端 connected 消息。 type WsConnected struct { Type string `json:"type"` SessionID string `json:"session_id"` ServerVersion string `json:"server_version"` } // WsSTTResult 服务端 stt_result 消息。 type WsSTTResult struct { Type string `json:"type"` RequestID string `json:"request_id"` Text string `json:"text"` IsFinal bool `json:"is_final"` } // WsLLMChunk 服务端 llm_chunk 消息。 type WsLLMChunk struct { Type string `json:"type"` RequestID string `json:"request_id"` Delta string `json:"delta"` Role string `json:"role"` } // WsLLMDone 服务端 llm_done 消息。 type WsLLMDone struct { Type string `json:"type"` RequestID string `json:"request_id"` FullText string `json:"full_text"` TokensUsed struct { Prompt int `json:"prompt"` Completion int `json:"completion"` Total int `json:"total"` } `json:"tokens_used"` Model string `json:"model"` LatencyMs int64 `json:"latency_ms"` } // WsTTSAudio 服务端 tts_audio 消息。 type WsTTSAudio struct { Type string `json:"type"` RequestID string `json:"request_id"` Audio string `json:"audio"` // base64 MimeType string `json:"mime_type"` // "audio/mp3" 或 "audio/pcm" IsLast bool `json:"is_last"` } // WsError 服务端 error 消息。 type WsError struct { Type string `json:"type"` RequestID string `json:"request_id,omitempty"` Code string `json:"code"` Message string `json:"message"` } // WsPong 服务端 pong 消息。 type WsPong struct { Type string `json:"type"` }