generatePromptSpecs function

String generatePromptSpecs(
  1. List<Map<String, dynamic>> prompts
)

Generates prompt spec constants for each prompt.

Implementation

String generatePromptSpecs(List<Map<String, dynamic>> prompts) {
  final specs = prompts
      .map((p) {
        final name = p['name'] as String;
        final title = p['title'] as String?;
        final description = p['description'] as String;
        final arguments = p['arguments'] as List<Map<String, dynamic>>;

        final argsList = arguments
            .map((arg) {
              final argName = arg['name'] as String;
              final argTitle = arg['title'] as String?;
              final argDesc = arg['description'] as String?;
              final argRequired = arg['required'] as bool;

              var argStr =
                  'PromptArgument(name: \'$argName\', required: $argRequired)';
              if (argTitle != null || argDesc != null) {
                final titlePart = argTitle != null
                    ? 'title: \'${escapeDartString(argTitle)}\''
                    : '';
                final descPart = argDesc != null
                    ? 'description: \'${escapeDartString(argDesc)}\''
                    : '';
                argStr =
                    'PromptArgument(name: \'$argName\', $titlePart, $descPart, required: $argRequired)';
              }
              return argStr;
            })
            .join(',\n          ');

        var promptStr =
            'static final _prompt${name}Spec = Prompt(name: \'$name\', description: \'${escapeDartString(description)}\'';
        if (title != null) {
          promptStr =
              'static final _prompt${name}Spec = Prompt(name: \'$name\', title: \'${escapeDartString(title)}\', description: \'${escapeDartString(description)}\'';
        }
        if (arguments.isNotEmpty) {
          promptStr +=
              ',\n        arguments: [\n          $argsList,\n        ]';
        }
        promptStr += ');';
        return promptStr;
      })
      .join('\n\n');

  return specs;
}