generatePromptHandlers function
Generates prompt handler methods for prompts/list and prompts/get.
Implementation
String generatePromptHandlers(List<Map<String, dynamic>> prompts) {
final promptImpls = prompts
.map((p) {
final name = p['name'] as String;
final methodName = p['methodName'] as String;
final className = p['className'] as String?;
final isStatic = p['isStatic'] as bool? ?? false;
final isAsync = p['isAsync'] as bool;
final sourceAlias = p['sourceAlias'] as String? ?? 'lib';
final arguments = p['arguments'] as List<Map<String, dynamic>>;
final argExtractions = arguments
.map((arg) {
final argName = arg['name'] as String;
final dartName = arg['dartName'] as String;
return """ final $dartName = request.arguments?['$argName'] as String?;
if ($dartName != null && $dartName.length > $maxPromptArgumentLength) {
throw ArgumentError('Argument $argName exceeds maximum length of $maxPromptArgumentLength characters');
}""";
})
.join('\n');
final argCalls = arguments
.map((arg) {
final dartName = arg['dartName'] as String;
final isNamed = arg['isNamed'] as bool;
return isNamed ? '$dartName: $dartName ?? \'\'' : dartName;
})
.join(', ');
String call;
if (className != null && isStatic) {
call = isAsync
? 'await $sourceAlias.$className.$methodName($argCalls)'
: '$sourceAlias.$className.$methodName($argCalls)';
} else if (className != null) {
call = isAsync
? 'await $sourceAlias.$className().$methodName($argCalls)'
: '$sourceAlias.$className().$methodName($argCalls)';
} else {
call = isAsync
? 'await $sourceAlias.$methodName($argCalls)'
: '$sourceAlias.$methodName($argCalls)';
}
return """ FutureOr<GetPromptResult> _prompt${name}Impl(GetPromptRequest request) async {
try {
$argExtractions
final promptResult = $call;
return GetPromptResult(
description: promptResult.description,
messages: promptResult.messages.map(_promptMessageToMcp).toList(),
);
} catch (e, st) {
if (_logErrors) {
io.stderr.writeln('[easy_api] prompt $name: \$e');
io.stderr.writeln(st);
await io.stderr.flush();
}
return GetPromptResult(
description: 'An error occurred while processing the prompt.',
messages: [],
);
}
}""";
})
.join('\n\n');
return '''
$promptImpls
PromptMessage _promptMessageToMcp(easy_api.PromptMessage message) {
final content = message.content;
return switch (content) {
easy_api.TextPromptContent() => PromptMessage(
role: message.role == easy_api.PromptRole.user ? Role.user : Role.assistant,
content: TextContent(text: content.text),
),
easy_api.ImagePromptContent() => PromptMessage(
role: message.role == easy_api.PromptRole.user ? Role.user : Role.assistant,
content: ImageContent(data: content.data, mimeType: content.mimeType),
),
easy_api.AudioPromptContent() => PromptMessage(
role: message.role == easy_api.PromptRole.user ? Role.user : Role.assistant,
content: AudioContent(data: content.data, mimeType: content.mimeType),
),
easy_api.ResourcePromptContent() => PromptMessage(
role: message.role == easy_api.PromptRole.user ? Role.user : Role.assistant,
content: EmbeddedResource(
resource: TextResourceContents(
uri: content.uri,
mimeType: content.mimeType,
text: content.text,
),
),
),
};
}''';
}