// Filename: internal/models/request.go package models // GeminiRequest 对应客户端发来的JSON请求体 type GeminiRequest struct { Contents []GeminiContent `json:"contents"` GenerationConfig GenerationConfig `json:"generationConfig,omitempty"` SafetySettings []SafetySetting `json:"safetySettings,omitempty"` Tools []Tool `json:"tools,omitempty"` } // GeminiContent 包含角色和内容部分 type GeminiContent struct { Role string `json:"role,omitempty"` Parts []Part `json:"parts"` } // Part 代表内容的一个组成部分 (文本或内联数据) type Part struct { Text string `json:"text,omitempty"` InlineData *InlineData `json:"inlineData,omitempty"` } // InlineData 用于多模态输入,如图像 type InlineData struct { MimeType string `json:"mimeType"` Data string `json:"data"` // Base64-encoded data } // GenerationConfig 控制模型的生成行为 type GenerationConfig struct { Temperature float32 `json:"temperature,omitempty"` TopP float32 `json:"topP,omitempty"` TopK int `json:"topK,omitempty"` MaxOutputTokens int `json:"maxOutputTokens,omitempty"` StopSequences []string `json:"stopSequences,omitempty"` } // SafetySetting 定义安全过滤的阈值 type SafetySetting struct { Category string `json:"category"` Threshold string `json:"threshold"` } // Tool 定义模型可以调用的外部工具 type Tool struct { FunctionDeclarations any `json:"functionDeclarations,omitempty"` } // ========= 用于智能网关流式响应解析的模型 ========= // GeminiSSEPayload 是用于解析SSE(Server-Sent Events)事件中data字段的结构体 // 它代表了从上游接收到的一个数据块。 type GeminiSSEPayload struct { Candidates []*Candidate `json:"candidates"` } // Candidate 包含了模型生成的内容和会话的结束原因 type Candidate struct { // Content 里面包含了本次返回的具体文本内容 Content *GeminiContent `json:"content"` // FinishReason 告知我们流结束的原因,例如 "STOP", "MAX_TOKENS" 等。 // 这是我们智能重试逻辑判断的核心依据。 FinishReason string `json:"finishReason"` }