xai-org/x-algorithm · error · SemanticCheckFailure

Unsupported field type %s

Error message

Unsupported field type %s

What it means

ThriftType.getValueMetaData converts apache-thrift FieldValueMetaData to botmaker metadata; TType codes outside the supported set (ending at TType.STRUCT) hit default and throw SemanticCheckFailure 'Unsupported field type'.

Source

Thrown at botmaker/src/java/com/twitter/botmaker/compiler/types/ThriftType.java:148

            getValueMetaData(setMetaData.elemMetaData, binaryFieldValueMetaDatas);
        return new SetMetaData(setElemMetaData);

      case TType.MAP:
        org.apache.thrift.meta_data.MapMetaData mapMetaData =
            (org.apache.thrift.meta_data.MapMetaData) valueMetaData;
        FieldValueMetaData keyElemMetaData =
            getValueMetaData(mapMetaData.keyMetaData, binaryFieldValueMetaDatas);
        FieldValueMetaData valueElemMetaData =
            getValueMetaData(mapMetaData.valueMetaData, binaryFieldValueMetaDatas);
        return new MapMetaData(keyElemMetaData, valueElemMetaData);

      case TType.STRUCT:
        org.apache.thrift.meta_data.StructMetaData structMetaData =
            (org.apache.thrift.meta_data.StructMetaData) valueMetaData;
        return new TBaseStructMetaData(structMetaData.structClass);

      default:
        throw new SemanticCheckFailure(
            String.format("Unsupported field type %s", valueMetaData.type));
    }
  }

  @Override
  public Set<String> getFieldNames() {
    return metadataMap.keySet();
  }

  public FieldMetaData getFieldMetadata(String fieldName) {
    return metadataMap.get(fieldName);
  }

  @Override
  public Type getFieldType(String fieldName) throws SemanticCheckFailure {
    FieldMetaData metaData = metadataMap.get(fieldName);
    if (metaData == null) {
      throw new SemanticCheckFailure(

View on GitHub (pinned to 24c60942c5)

Solutions

  1. Avoid fields with the unsupported TType in botmaker rules
  2. Upgrade botmaker to a build supporting the TType (e.g. binary/uuid)
  3. Regenerate thrift code so metadata matches the thrift runtime in use

Example fix

// before
field: payload  // thrift binary field, unsupported TType
// after
field: payloadStr  // string-typed field, or upgrade botmaker
Defensive patterns

Strategy: try-catch

Validate before calling

switch (valueMetaData.type) {
  case TType.BOOL: case TType.BYTE: case TType.DOUBLE: case TType.I16:
  case TType.I32: case TType.I64: case TType.STRING: case TType.STRUCT: break;
  default: skip();
}

Try / catch

catch SemanticCheckFailure 'Unsupported field type' and skip/fail the field with its TType code

Prevention

When it happens

Trigger: valueMetaData/listElemMetaData/setElemMetaData/keyElemMetaData/valueElemMetaData encountering a TType the compiler doesn't handle, e.g. TType.BINARY in older builds, TType.UUID, or stop/void sentinels from malformed metadata.

Common situations: Apache-thrift generated structs using field types newer than the botmaker compiler supports; thrift runtime upgrade introducing new TType constants; corrupted hand-built metadata in tests.

Related errors


AI-assisted analysis of xai-org/x-algorithm@24c60942c5 (2026-08-28). Data as JSON: /api/errors/208b88d66c0ca813. Report an issue: GitHub.