Tool<Input, Output> constructor

Tool<Input, Output>({
  1. required String name,
  2. required String description,
  3. required ToolFn<Input, Output> fn,
  4. SchemanticType<Input>? inputSchema,
  5. SchemanticType<Output>? outputSchema,
  6. Map<String, dynamic>? metadata,
})

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;
       }),
     );