|
@@ -114,7 +114,7 @@ func (a *Adaptor) GetRequestURL(info *relaycommon.RelayInfo) (string, error) {
|
|
|
if strings.HasPrefix(info.UpstreamModelName, "text-embedding") ||
|
|
if strings.HasPrefix(info.UpstreamModelName, "text-embedding") ||
|
|
|
strings.HasPrefix(info.UpstreamModelName, "embedding") ||
|
|
strings.HasPrefix(info.UpstreamModelName, "embedding") ||
|
|
|
strings.HasPrefix(info.UpstreamModelName, "gemini-embedding") {
|
|
strings.HasPrefix(info.UpstreamModelName, "gemini-embedding") {
|
|
|
- return fmt.Sprintf("%s/%s/models/%s:embedContent", info.BaseUrl, version, info.UpstreamModelName), nil
|
|
|
|
|
|
|
+ return fmt.Sprintf("%s/%s/models/%s:batchEmbedContents", info.BaseUrl, version, info.UpstreamModelName), nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
action := "generateContent"
|
|
action := "generateContent"
|
|
@@ -156,29 +156,35 @@ func (a *Adaptor) ConvertEmbeddingRequest(c *gin.Context, info *relaycommon.Rela
|
|
|
if len(inputs) == 0 {
|
|
if len(inputs) == 0 {
|
|
|
return nil, errors.New("input is empty")
|
|
return nil, errors.New("input is empty")
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- // only process the first input
|
|
|
|
|
- geminiRequest := dto.GeminiEmbeddingRequest{
|
|
|
|
|
- Content: dto.GeminiChatContent{
|
|
|
|
|
- Parts: []dto.GeminiPart{
|
|
|
|
|
- {
|
|
|
|
|
- Text: inputs[0],
|
|
|
|
|
|
|
+ // process all inputs
|
|
|
|
|
+ geminiRequests := make([]map[string]interface{}, 0, len(inputs))
|
|
|
|
|
+ for _, input := range inputs {
|
|
|
|
|
+ geminiRequest := map[string]interface{}{
|
|
|
|
|
+ "model": fmt.Sprintf("models/%s", info.UpstreamModelName),
|
|
|
|
|
+ "content": dto.GeminiChatContent{
|
|
|
|
|
+ Parts: []dto.GeminiPart{
|
|
|
|
|
+ {
|
|
|
|
|
+ Text: input,
|
|
|
|
|
+ },
|
|
|
},
|
|
},
|
|
|
},
|
|
},
|
|
|
- },
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- // set specific parameters for different models
|
|
|
|
|
- // https://ai.google.dev/api/embeddings?hl=zh-cn#method:-models.embedcontent
|
|
|
|
|
- switch info.UpstreamModelName {
|
|
|
|
|
- case "text-embedding-004":
|
|
|
|
|
- // except embedding-001 supports setting `OutputDimensionality`
|
|
|
|
|
- if request.Dimensions > 0 {
|
|
|
|
|
- geminiRequest.OutputDimensionality = request.Dimensions
|
|
|
|
|
|
|
+ // set specific parameters for different models
|
|
|
|
|
+ // https://ai.google.dev/api/embeddings?hl=zh-cn#method:-models.embedcontent
|
|
|
|
|
+ switch info.UpstreamModelName {
|
|
|
|
|
+ case "text-embedding-004":
|
|
|
|
|
+ // except embedding-001 supports setting `OutputDimensionality`
|
|
|
|
|
+ if request.Dimensions > 0 {
|
|
|
|
|
+ geminiRequest["outputDimensionality"] = request.Dimensions
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
+ geminiRequests = append(geminiRequests, geminiRequest)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- return geminiRequest, nil
|
|
|
|
|
|
|
+ return map[string]interface{}{
|
|
|
|
|
+ "requests": geminiRequests,
|
|
|
|
|
+ }, nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (a *Adaptor) ConvertOpenAIResponsesRequest(c *gin.Context, info *relaycommon.RelayInfo, request dto.OpenAIResponsesRequest) (any, error) {
|
|
func (a *Adaptor) ConvertOpenAIResponsesRequest(c *gin.Context, info *relaycommon.RelayInfo, request dto.OpenAIResponsesRequest) (any, error) {
|