generate<C> function

Future<GenerateResponse> generate<C>({
  1. String? prompt,
  2. List<Message>? messages,
  3. required Model<C> model,
  4. C? config,
  5. List<Tool>? tools,
  6. String? toolChoice,
  7. bool? returnToolRequests,
  8. int? maxTurns,
  9. JsonExtensionType? outputSchema,
  10. String? outputFormat,
  11. bool? outputConstrained,
  12. String? outputInstructions,
  13. bool? outputNoInstructions,
  14. String? outputContentType,
  15. Map<String, dynamic>? context,
  16. StreamingCallback<GenerateResponseChunk>? onChunk,
})

Implementation

Future<GenerateResponse> generate<C>({
  String? prompt,
  List<Message>? messages,
  required Model<C> model,
  C? config,
  List<Tool>? tools,
  String? toolChoice,
  bool? returnToolRequests,
  int? maxTurns,
  JsonExtensionType? outputSchema,
  String? outputFormat,
  bool? outputConstrained,
  String? outputInstructions,
  bool? outputNoInstructions,
  String? outputContentType,
  Map<String, dynamic>? context,
  StreamingCallback<GenerateResponseChunk>? onChunk,
}) async {
  if (outputInstructions != null && outputNoInstructions == true) {
    throw ArgumentError(
      'Cannot set both outputInstructions and outputNoInstructions to true.',
    );
  }

  final registry = Registry();
  registry.register(model);
  tools?.forEach((t) => registry.register(t));
  GenerateActionOutputConfig? outputConfig;
  if (outputSchema != null ||
      outputFormat != null ||
      outputConstrained != null ||
      outputInstructions != null ||
      outputNoInstructions != null ||
      outputContentType != null) {
    outputConfig = GenerateActionOutputConfig({
      if (outputFormat != null) 'format': outputFormat,
      if (outputSchema != null)
        'jsonSchema': outputSchema.jsonSchema as Map<String, dynamic>,
      if (outputConstrained != null) 'constrained': outputConstrained,
      if (outputInstructions != null) 'instructions': outputInstructions,
      if (outputContentType != null) 'contentType': outputContentType,
      if (outputNoInstructions == true) 'instructions': false,
    });
  }
  return generateHelper(
    registry,
    prompt: prompt,
    messages: messages,
    model: model,
    config: config,
    tools: tools?.map((t) => t.name).toList(),
    toolChoice: toolChoice,
    returnToolRequests: returnToolRequests,
    maxTurns: maxTurns,
    output: outputConfig,
    context: context,
    onChunk: onChunk,
  );
}