preparePrompt method
Prepare prompt with structured output instructions Uses C++ rac_structured_output_prepare_prompt
Implementation
String preparePrompt(String originalPrompt, String schema,
{bool includeSchemaInPrompt = true}) {
final promptPtr = originalPrompt.toNativeUtf8();
final schemaPtr = schema.toNativeUtf8();
// Build config struct
final configPtr = calloc<RacStructuredOutputConfigStruct>();
configPtr.ref.jsonSchema = schemaPtr;
configPtr.ref.includeSchemaInPrompt = includeSchemaInPrompt ? 1 : 0;
final preparedPtrPtr = calloc<Pointer<Utf8>>();
try {
final lib = PlatformLoader.loadCommons();
final preparePromptFn = lib.lookupFunction<
Int32 Function(Pointer<Utf8>,
Pointer<RacStructuredOutputConfigStruct>, Pointer<Pointer<Utf8>>),
int Function(Pointer<Utf8>, Pointer<RacStructuredOutputConfigStruct>,
Pointer<Pointer<Utf8>>)>('rac_structured_output_prepare_prompt');
final result = preparePromptFn(promptPtr, configPtr, preparedPtrPtr);
if (result != RAC_SUCCESS) {
_logger.warning('preparePrompt failed with code $result');
return _fallbackPreparePrompt(originalPrompt, schema,
includeSchemaInPrompt: includeSchemaInPrompt);
}
final preparedPtr = preparedPtrPtr.value;
if (preparedPtr == nullptr) {
return _fallbackPreparePrompt(originalPrompt, schema,
includeSchemaInPrompt: includeSchemaInPrompt);
}
final prepared = preparedPtr.toDartString();
lib.lookupFunction<Void Function(Pointer<Void>),
void Function(Pointer<Void>)>('rac_free')(preparedPtr.cast<Void>());
return prepared;
} catch (e) {
_logger.error('preparePrompt exception: $e');
return _fallbackPreparePrompt(originalPrompt, schema,
includeSchemaInPrompt: includeSchemaInPrompt);
} finally {
calloc.free(promptPtr);
calloc.free(schemaPtr);
calloc.free(configPtr);
calloc.free(preparedPtrPtr);
}
}