websocket method

Stream websocket({
  1. required String baseDataUrl,
  2. required String mentor,
  3. required String sessionId,
  4. required String token,
  5. required String username,
  6. String tenant = 'main',
  7. String? prompt,
})

Implementation

Stream<dynamic> websocket({
  required String baseDataUrl,
  required String mentor,
  required String sessionId,
  required String token,
  required String username,
  String tenant = 'main',
  String? prompt, // Optional prompt
}) {
  var channel = WebSocketChannel.connect(
    Uri.parse('wss://$baseDataUrl/ws/langflow/'),
  );

  // Initial data without the prompt
  final dataWithoutPrompt = {
    "flow": {"name": mentor, "tenant": tenant, "username": username},
    "session_id": sessionId,
    "token": token
  };

  // Send initial data without prompt
  channel.sink.add(json.encode(dataWithoutPrompt));
  if (prompt != null) {
    final dataWithPrompt = {...dataWithoutPrompt, "prompt": prompt};
    channel.sink.add(json.encode(dataWithPrompt));
  } else {
    channel.sink.close();
  }

  // Return a stream that handles incoming messages
  return channel.stream.map((message) {
    var partialResponse = jsonDecode(message);
    if ((partialResponse.containsKey('error')) ||
        (partialResponse.containsKey('eos') &&
            partialResponse['eos'] == true)) {
      channel.sink.close();
    }
    return partialResponse;
  }).handleError((error) {
    print('Error connecting to server: $error');
    channel.sink.close();
  });
}