streamCallTool method

Future<void> streamCallTool(
  1. String toolId,
  2. FunctionCall functionCall, {
  3. required void onEvent(
    1. String event,
    2. Map<String, dynamic> data
    ),
  4. void onError(
    1. Object error,
    2. StackTrace stackTrace
    )?,
})

POST /tools/{toolId}/streamCall

Implementation

Future<void> streamCallTool(
  String toolId,
  FunctionCall functionCall, {
  required void Function(String event, Map<String, dynamic> data) onEvent,
  void Function(Object error, StackTrace stackTrace)? onError,
}) async {
  try {
    Stream<String> sseStream = await toolSse.request(
      '/${toolId}/streamCall',
      requestBody: functionCall.toJson(),
    );
    sseStream.listen(
      (data) => SseClient.parse(data, onEvent),
      onError: (error, stackTrace) {
        onError?.call(_normalizeError(error), stackTrace);
      },
      cancelOnError: true,
    );
  } catch (error, stackTrace) {
    final normalized = _normalizeError(error);
    if (onError != null) {
      onError(normalized, stackTrace);
      return;
    }
    if (identical(normalized, error)) rethrow;
    Error.throwWithStackTrace(normalized, stackTrace);
  }
}