refactor: 重构Gemini适配器以支持多模态输入 fix: 修复React Hooks依赖警告 style: 清理未使用的导入和代码 docs: 更新用户界面文本和提示 perf: 优化图像和视频URL处理性能 test: 添加数据迁移工具和测试 build: 更新依赖项和.gitignore chore: 同步Zenmux模型和价格比例
122 lines
3.8 KiB
Go
122 lines
3.8 KiB
Go
package gemini
|
|
|
|
type ChatRequest struct {
|
|
Contents []ChatContent `json:"contents"`
|
|
SafetySettings []ChatSafetySettings `json:"safety_settings,omitempty"`
|
|
GenerationConfig ChatGenerationConfig `json:"generation_config,omitempty"`
|
|
Tools []ChatTools `json:"tools,omitempty"`
|
|
SystemInstruction *ChatContent `json:"system_instruction,omitempty"`
|
|
}
|
|
|
|
type EmbeddingRequest struct {
|
|
Model string `json:"model"`
|
|
Content ChatContent `json:"content"`
|
|
TaskType string `json:"taskType,omitempty"`
|
|
Title string `json:"title,omitempty"`
|
|
OutputDimensionality int `json:"outputDimensionality,omitempty"`
|
|
}
|
|
|
|
type BatchEmbeddingRequest struct {
|
|
Requests []EmbeddingRequest `json:"requests"`
|
|
}
|
|
|
|
type EmbeddingData struct {
|
|
Values []float64 `json:"values"`
|
|
}
|
|
|
|
type EmbeddingResponse struct {
|
|
Embeddings []EmbeddingData `json:"embeddings"`
|
|
Error *Error `json:"error,omitempty"`
|
|
}
|
|
|
|
type Error struct {
|
|
Code int `json:"code,omitempty"`
|
|
Message string `json:"message,omitempty"`
|
|
Status string `json:"status,omitempty"`
|
|
}
|
|
|
|
type InlineData struct {
|
|
MimeType string `json:"mimeType"`
|
|
Data string `json:"data"`
|
|
}
|
|
|
|
type FunctionCall struct {
|
|
FunctionName string `json:"name"`
|
|
Arguments any `json:"args"`
|
|
}
|
|
|
|
type FunctionResponse struct {
|
|
Name string `json:"name"`
|
|
Response any `json:"response"`
|
|
}
|
|
|
|
type Part struct {
|
|
Text string `json:"text,omitempty"`
|
|
InlineData *InlineData `json:"inlineData,omitempty"`
|
|
FunctionCall *FunctionCall `json:"functionCall,omitempty"`
|
|
FunctionResponse *FunctionResponse `json:"functionResponse,omitempty"`
|
|
// Thought marks this part as internal reasoning/thinking content (Gemini thinking models)
|
|
Thought bool `json:"thought,omitempty"`
|
|
}
|
|
|
|
type ChatContent struct {
|
|
Role string `json:"role,omitempty"`
|
|
Parts []Part `json:"parts"`
|
|
}
|
|
|
|
type ChatSafetySettings struct {
|
|
Category string `json:"category"`
|
|
Threshold string `json:"threshold"`
|
|
}
|
|
|
|
type ChatTools struct {
|
|
FunctionDeclarations any `json:"function_declarations,omitempty"`
|
|
}
|
|
|
|
type GeminiThinkingConfig struct {
|
|
ThinkingBudget int `json:"thinkingBudget"` // -1 = dynamic, 0 = disabled
|
|
}
|
|
|
|
type ChatGenerationConfig struct {
|
|
ResponseMimeType string `json:"responseMimeType,omitempty"`
|
|
ResponseSchema any `json:"responseSchema,omitempty"`
|
|
ResponseModalities []string `json:"responseModalities,omitempty"`
|
|
Temperature *float64 `json:"temperature,omitempty"`
|
|
TopP *float64 `json:"topP,omitempty"`
|
|
TopK float64 `json:"topK,omitempty"`
|
|
MaxOutputTokens int `json:"maxOutputTokens,omitempty"`
|
|
CandidateCount int `json:"candidateCount,omitempty"`
|
|
StopSequences []string `json:"stopSequences,omitempty"`
|
|
ThinkingConfig *GeminiThinkingConfig `json:"thinkingConfig,omitempty"`
|
|
}
|
|
|
|
// --- Google Imagen ---
|
|
|
|
// ImagenRequest is the request body for Google Imagen (predict endpoint).
|
|
// POST /v1beta/models/{model}:predict
|
|
type ImagenRequest struct {
|
|
Instances []ImagenInstance `json:"instances"`
|
|
Parameters ImagenParameters `json:"parameters"`
|
|
}
|
|
|
|
type ImagenInstance struct {
|
|
Prompt string `json:"prompt"`
|
|
}
|
|
|
|
type ImagenParameters struct {
|
|
SampleCount int `json:"sampleCount"`
|
|
AspectRatio string `json:"aspectRatio,omitempty"`
|
|
}
|
|
|
|
// ImagenResponse is the response from Google Imagen.
|
|
type ImagenResponse struct {
|
|
Predictions []ImagenPrediction `json:"predictions"`
|
|
Error *Error `json:"error,omitempty"`
|
|
}
|
|
|
|
type ImagenPrediction struct {
|
|
BytesBase64Encoded string `json:"bytesBase64Encoded"`
|
|
MimeType string `json:"mimeType"`
|
|
}
|
|
|