chatStream method

  1. @override
Stream<ChatStreamEvent> chatStream(
  1. List<ChatMessage> messages, {
  2. List<Tool>? tools,
})
override

Sends a streaming chat request to the provider

messages - The conversation history as a list of chat messages tools - Optional list of tools to use in the chat

Returns a stream of chat events

Implementation

@override
Stream<ChatStreamEvent> chatStream(
  List<ChatMessage> messages, {
  List<Tool>? tools,
}) async* {
  if (config.apiKey.isEmpty) {
    yield ErrorEvent(const AuthError('Missing xAI API key'));
    return;
  }

  try {
    final effectiveTools = tools ?? config.tools;
    final requestBody = _buildRequestBody(messages, effectiveTools, true);

    // Create SSE stream
    final stream = client.postStreamRaw(chatEndpoint, requestBody);

    await for (final chunk in stream) {
      final events = _parseStreamEvents(chunk);
      for (final event in events) {
        yield event;
      }
    }
  } catch (e) {
    yield ErrorEvent(GenericError('Unexpected error: $e'));
  }
}