validate method
Validate structured output Uses C++ rac_structured_output_validate
Implementation
StructuredOutputValidationResult validate(String text, String schema) {
final textPtr = text.toNativeUtf8();
final schemaPtr = schema.toNativeUtf8();
final configPtr = calloc<RacStructuredOutputConfigStruct>();
configPtr.ref.jsonSchema = schemaPtr;
configPtr.ref.includeSchemaInPrompt = 1;
final validationPtr = calloc<RacStructuredOutputValidationStruct>();
try {
final lib = PlatformLoader.loadCommons();
final validateFn = lib.lookupFunction<
Int32 Function(
Pointer<Utf8>,
Pointer<RacStructuredOutputConfigStruct>,
Pointer<RacStructuredOutputValidationStruct>),
int Function(
Pointer<Utf8>,
Pointer<RacStructuredOutputConfigStruct>,
Pointer<RacStructuredOutputValidationStruct>)>(
'rac_structured_output_validate');
final result = validateFn(textPtr, configPtr, validationPtr);
if (result != RAC_SUCCESS) {
return _fallbackValidate(text);
}
final validation = validationPtr.ref;
final isValid = validation.isValid == 1;
final containsJson = validation.extractedJson != nullptr;
String? errorMessage;
if (validation.errorMessage != nullptr) {
errorMessage = validation.errorMessage.toDartString();
lib.lookupFunction<Void Function(Pointer<Void>),
void Function(Pointer<Void>)>('rac_free')(
validation.errorMessage.cast<Void>(),
);
}
if (validation.extractedJson != nullptr) {
lib.lookupFunction<Void Function(Pointer<Void>),
void Function(Pointer<Void>)>('rac_free')(
validation.extractedJson.cast<Void>(),
);
}
return StructuredOutputValidationResult(
isValid: isValid,
containsJSON: containsJson,
error: errorMessage,
);
} catch (e) {
_logger.error('validate exception: $e');
return _fallbackValidate(text);
} finally {
calloc.free(textPtr);
calloc.free(schemaPtr);
calloc.free(configPtr);
calloc.free(validationPtr);
}
}