{"record":{"id":"3567539c8a26a475","repo":"microsoft/semantic-kernel","slug":"field-field-is-not-supported","errorCode":null,"errorMessage":"Field '{field}' is not supported.","messagePattern":"Field '(.+?)' is not supported\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/semantic_kernel/connectors/_search_shared.py","lineNumber":42,"sourceCode":"        self.visit(node.body)\n\n    @override\n    def visit_Compare(self, node):\n        # Only support x.FIELD == VALUE\n        if not (isinstance(node.left, ast.Attribute) and isinstance(node.left.value, ast.Name)):\n            raise NotImplementedError(\"Left side must be x.FIELD.\")\n        field = node.left.attr\n        if not (len(node.ops) == 1 and isinstance(node.ops[0], ast.Eq)):\n            raise NotImplementedError(\"Only == comparisons are supported.\")\n        right = node.comparators[0]\n        if isinstance(right, ast.Constant):\n            if right.value is None:\n                raise NotImplementedError(\"None values are not supported.\")\n            value = str(right.value)\n        else:\n            raise NotImplementedError(\"Only constant values are supported on the right side.\")\n        if field not in self.valid_parameters:\n            raise ValueError(f\"Field '{field}' is not supported.\")\n        self.filters.append({field: quote_plus(value)})\n\n    @override\n    def visit_BoolOp(self, node):\n        if not isinstance(node.op, ast.And):\n            raise NotImplementedError(\"Only 'and' of == comparisons is supported.\")\n        for v in node.values:\n            self.visit(v)\n","sourceCodeStart":24,"sourceCodeEnd":51,"githubUrl":"https://github.com/microsoft/semantic-kernel/blob/c028a0c7dc4f0814cdcbaba9d998f187a41197bf/python/semantic_kernel/connectors/_search_shared.py#L24-L51","documentation":"Unlike the NotImplementedError cases, this is a ValueError raised when the field name (node.left.attr) is not in the visitor's valid_parameters list. It signals a recognized-shape filter that names a field the connector does not allow.","triggerScenarios":"Writing `lambda x: x.unknown_field == \"v\"` where 'unknown_field' is not among the valid parameters the search connector passed to SearchLambdaVisitor.","commonSituations":"Guessing a field name not exposed by the Brave/Google search connector; using a field from a different connector; typo in the field name.","solutions":["Use only field names the connector advertises as valid filter parameters for that provider.","Check the connector's documented valid filter fields and align the lambda's x.FIELD accordingly.","Remove the unsupported filter if it is not essential."],"exampleFix":"// before\nlambda x: x.language == \"en\"  # if 'language' is not a valid parameter for this connector\n\n// after\nlambda x: x.country == \"us\"  # use a field name in the connector's valid_parameters","handlingStrategy":"validation","validationCode":"import ast\nnode = ast.parse(filter_src, mode='eval').body\ndef collect_fields(n, out):\n    if isinstance(n, ast.Compare) and isinstance(n.left, ast.Attribute):\n        out.add(n.left.attr)\n    if isinstance(n, ast.BoolOp):\n        for v in n.values: collect_fields(v, out)\nfields = set(); collect_fields(node.body, fields)\nbad = fields - set(valid_parameters)\nassert not bad, f'unsupported fields: {bad}'","typeGuard":"def fields_are_valid(node, valid_parameters: list[str]) -> bool:\n    fields = set()\n    # collect ast.Attribute attrs as above\n    return fields.issubset(set(valid_parameters))","tryCatchPattern":"try:\n    visitor.visit(ast.parse(filter_src, mode='eval'))\nexcept ValueError as e:\n    # unsupported field; drop or rename the filter\n    logger.warning('filter field rejected: %s', e)","preventionTips":["Use only field names the connector documents as valid filter parameters","Validate field names against valid_parameters before building the lambda","Keep a constant of allowed fields per provider"],"tags":["search","filters","lambda","validation"],"backgroundTag":null,"analyzedSha":"c028a0c7dc4f0814cdcbaba9d998f187a41197bf","analyzedAt":"2026-08-13T13:48:05.040Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}