Просмотр исходного кода

feat: Enhance Gemini function parameter handling

- Added logic to ensure that function parameters have non-empty properties.
- Implemented checks to add a default empty property if no parameters are needed.
- Updated the required field to match existing properties, improving the robustness of the Gemini function integration.
CalciumIon 1 год назад
Родитель
Сommit
53ab2aaee4
1 измененных файлов с 28 добавлено и 0 удалено
  1. 28 0
      relay/channel/gemini/relay-gemini.go

+ 28 - 0
relay/channel/gemini/relay-gemini.go

@@ -56,6 +56,34 @@ func CovertGemini2OpenAI(textRequest dto.GeneralOpenAIRequest) (*GeminiChatReque
 				googleSearch = true
 				continue
 			}
+			// Ensure parameters has non-empty properties
+			if tool.Function.Parameters != nil {
+				params, ok := tool.Function.Parameters.(map[string]interface{})
+				if ok {
+					if props, hasProps := params["properties"].(map[string]interface{}); hasProps {
+						if len(props) == 0 {
+							// Add an empty property if no parameters needed
+							params["properties"] = map[string]interface{}{
+								"_": map[string]interface{}{
+									"type":        "string",
+									"description": "No parameters needed",
+								},
+							}
+							// Update required field to match the property
+							params["required"] = []string{"_"}
+						} else {
+							// If properties exist, ensure required field matches existing properties
+							existingProps := make([]string, 0)
+							for propName := range props {
+								existingProps = append(existingProps, propName)
+							}
+							if len(existingProps) > 0 {
+								params["required"] = []string{existingProps[0]}
+							}
+						}
+					}
+				}
+			}
 			functions = append(functions, tool.Function)
 		}
 		if len(functions) > 0 {