Files
CamTalk/backend/internal/models/models.go

130 lines
3.5 KiB
Go
Raw Normal View History

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"`
}