Tool<Input, Output> constructor
Tool<Input, Output> ({})
Implementation
Tool({
required String name,
required String description,
required ToolFn<Input, Output> fn,
SchemanticType<Input>? inputSchema,
SchemanticType<Output>? outputSchema,
Map<String, dynamic>? metadata,
}) : toolOutputSchema = outputSchema,
super(
name: name,
description: description,
inputSchema: inputSchema,
// Every Genkit Dart tool implements the multipart ("v2") contract, so
// it is registered and resolved under `ActionType.tool` (`tool.v2`).
metadata: {...?metadata, 'type': ActionType.tool.value},
actionType: .tool,
fn: requireInput('Tool', name, (input, ctx) async {
final result = await fn(input, ToolFnArg(ctx));
// Record the interrupt on the tool's telemetry span. This runs
// inside the tool's span (see `Action.run` -> `runInNewSpan`).
if (result is ToolInterruptResult<Output>) {
setCustomMetadataAttributes({'interrupt': result.data ?? true});
}
return result;
}),
);