langchainjs icon indicating copy to clipboard operation
langchainjs copied to clipboard

ChatGoogleGenerativeAI withStructuredOutputs does not bind the correct fields

Open gitaugakwa opened this issue 8 months ago • 2 comments

Checked other resources

  • [x] I added a very descriptive title to this issue.
  • [x] I searched the LangChain.js documentation with the integrated search.
  • [x] I used the GitHub search to find a similar question and didn't find it.
  • [x] I am sure that this is a bug in LangChain.js rather than my code.
  • [x] The bug is not resolved by updating to the latest stable version of LangChain (or the specific integration package).

Example Code

const llm = new ChatGoogleGenerativeAI({
      model: 'gemini-2.0-pro-exp-02-05',
      temperature: 0,
      apiKey: env.get('GEMINI_API_KEY'),
    })

llmWithStructuredOutput = llm.withStructuredOutput({
        "type": "object",
        "$defs": {},
        "required": [
          "location",
          "type",
          "name",
          "description",
          "startDate",
          "startTime",
          "endDate",
          "endTime"
        ],
        "properties": {
          "name": {
            "anyOf": [
              {
                "type": "null"
              },
              {
                "type": "string"
              }
            ]
          },
          "type": {
            "anyOf": [
              {
                "type": "null"
              },
              {
                "enum": [
                  "paid",
                  "free"
                ],
                "type": "string"
              }
            ]
          },
          "endDate": {
            "anyOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "description": "@format date"
              }
            ]
          },
          "endTime": {
            "anyOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "description": "@format time"
              }
            ]
          },
          "location": {
            "anyOf": [
              {
                "type": "null"
              },
              {
                "type": "string"
              }
            ]
          },
          "startDate": {
            "anyOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "description": "@format date"
              }
            ]
          },
          "startTime": {
            "anyOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "description": "@format time"
              }
            ]
          },
          "description": {
            "anyOf": [
              {
                "type": "null"
              },
              {
                "type": "string"
              }
            ]
          }
        },
        "additionalProperties": false
      });

Error Message and Stack Trace (if applicable)

[GoogleGenerativeAI Error]: Error fetching from https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-pro-exp-02-05:generateContent: [400 Bad Request] Invalid JSON payload received. Unknown name "$defs" at 'tools[0].function_declarations[0].parameters': Cannot find field. Invalid value at 'tools[0].function_declarations[0].parameters.properties[0].value.any_of[0].type' (type.googleapis.com/google.ai.generativelanguage.v1beta.Type), "null" Invalid value at 'tools[0].function_declarations[0].parameters.properties[1].value.any_of[0].type' (type.googleapis.com/google.ai.generativelanguage.v1beta.Type), "null" Invalid value at 'tools[0].function_declarations[0].parameters.properties[2].value.any_of[0].type' (type.googleapis.com/google.ai.generativelanguage.v1beta.Type), "null" Invalid value at 'tools[0].function_declarations[0].parameters.properties[3].value.any_of[0].type' (type.googleapis.com/google.ai.generativelanguage.v1beta.Type), "null" Invalid value at 'tools[0].function_declarations[0].parameters.properties[4].value.any_of[0].type' (type.googleapis.com/google.ai.generativelanguage.v1beta.Type), "null" Invalid value at 'tools[0].function_declarations[0].parameters.properties[5].value.any_of[0].type' (type.googleapis.com/google.ai.generativelanguage.v1beta.Type), "null" Invalid value at 'tools[0].function_declarations[0].parameters.properties[6].value.any_of[0].type' (type.googleapis.com/google.ai.generativelanguage.v1beta.Type), "null" Invalid value at 'tools[0].function_declarations[0].parameters.properties[7].value.any_of[0].type' (type.googleapis.com/google.ai.generativelanguage.v1beta.Type), "null" Invalid JSON payload received. Unknown name "additionalProperties" at 'tools[0].function_declarations[0].parameters': Cannot find field. Invalid JSON payload received. Unknown name "name" at 'tools[0].function_declarations[0].parameters': Cannot find field. [{"@type":"type.googleapis.com/google.rpc.BadRequest","fieldViolations":[{"field":"tools[0].function_declarations[0].parameters","description":"Invalid JSON payload received. Unknown name "$defs" at 'tools[0].function_declarations[0].parameters': Cannot find field."},{"field":"tools[0].function_declarations[0].parameters.properties[0].value.any_of[0].type","description":"Invalid value at 'tools[0].function_declarations[0].parameters.properties[0].value.any_of[0].type' (type.googleapis.com/google.ai.generativelanguage.v1beta.Type), "null""},{"field":"tools[0].function_declarations[0].parameters.properties[1].value.any_of[0].type","description":"Invalid value at 'tools[0].function_declarations[0].parameters.properties[1].value.any_of[0].type' (type.googleapis.com/google.ai.generativelanguage.v1beta.Type), "null""},{"field":"tools[0].function_declarations[0].parameters.properties[2].value.any_of[0].type","description":"Invalid value at 'tools[0].function_declarations[0].parameters.properties[2].value.any_of[0].type' (type.googleapis.com/google.ai.generativelanguage.v1beta.Type), "null""},{"field":"tools[0].function_declarations[0].parameters.properties[3].value.any_of[0].type","description":"Invalid value at 'tools[0].function_declarations[0].parameters.properties[3].value.any_of[0].type' (type.googleapis.com/google.ai.generativelanguage.v1beta.Type), "null""},{"field":"tools[0].function_declarations[0].parameters.properties[4].value.any_of[0].type","description":"Invalid value at 'tools[0].function_declarations[0].parameters.properties[4].value.any_of[0].type' (type.googleapis.com/google.ai.generativelanguage.v1beta.Type), "null""},{"field":"tools[0].function_declarations[0].parameters.properties[5].value.any_of[0].type","description":"Invalid value at 'tools[0].function_declarations[0].parameters.properties[5].value.any_of[0].type' (type.googleapis.com/google.ai.generativelanguage.v1beta.Type), "null""},{"field":"tools[0].function_declarations[0].parameters.properties[6].value.any_of[0].type","description":"Invalid value at 'tools[0].function_declarations[0].parameters.properties[6].value.any_of[0].type' (type.googleapis.com/google.ai.generativelanguage.v1beta.Type), "null""},{"field":"tools[0].function_declarations[0].parameters.properties[7].value.any_of[0].type","description":"Invalid value at 'tools[0].function_declarations[0].parameters.properties[7].value.any_of[0].type' (type.googleapis.com/google.ai.generativelanguage.v1beta.Type), "null""},{"field":"tools[0].function_declarations[0].parameters","description":"Invalid JSON payload received. Unknown name "additionalProperties" at 'tools[0].function_declarations[0].parameters': Cannot find field."},{"field":"tools[0].function_declarations[0].parameters","description":"Invalid JSON payload received. Unknown name "name" at 'tools[0].function_declarations[0].parameters': Cannot find field."}]}]

Description

The library sets the tools and tool_choice key instead of the generationConfig key

System Info

node -v v22.11.0

"@langchain/community": "^0.3.32", "@langchain/core": "^0.3.40", "@langchain/google-genai": "^0.1.9", "@langchain/langgraph": "^0.2.49",

gitaugakwa avatar Feb 25 '25 20:02 gitaugakwa