generateWithStructuredOutput static method

Future<LLMGenerationResult> generateWithStructuredOutput({
  1. required String prompt,
  2. required StructuredOutputOptions structuredOutput,
  3. LLMGenerationOptions? options,
})

Apply a structured-output configuration to a normal LLM generation.

Mirrors Swift RunAnywhere.generateWithStructuredOutput(...): prompt preparation remains in commons, then the standard generated LLM request path runs through rac_llm_generate_proto.

Implementation

static Future<LLMGenerationResult> generateWithStructuredOutput({
  required String prompt,
  required StructuredOutputOptions structuredOutput,
  LLMGenerationOptions? options,
}) async {
  final effectiveOptions = LLMGenerationOptions();
  if (options != null) {
    effectiveOptions.mergeFromMessage(options);
  }
  effectiveOptions.structuredOutput = structuredOutput;

  if (structuredOutput.includeSchemaInPrompt) {
    final result = DartBridgeStructuredOutput.shared.preparePrompt(
      prompt: prompt,
      options: structuredOutput,
    );
    if (result.errorCode != 0) {
      // Mirrors Swift `.processingFailed` on prep failure
      // (RunAnywhere+StructuredOutput.swift:148-150).
      throw SDKException.processingFailed(
        result.errorMessage.isNotEmpty
            ? result.errorMessage
            : 'Structured-output prompt preparation failed',
      );
    }
    if (result.hasSystemPrompt()) {
      effectiveOptions.systemPrompt = result.systemPrompt;
    }
  }

  return RunAnywhereLLM.shared.generate(prompt, effectiveOptions);
}