getResponse method

  1. @override
Future<String> getResponse()
override

Implementation

@override
Future<String> getResponse() async {
  if (kDebugMode) {
    print('πŸš€ getResponse: Starting response generation');
  }

  try {
    final promptArray = _createPromptArray();

    if (kDebugMode) {
      print('🎯 getResponse: Prompt array type: ${promptArray.runtimeType}');
      print('🎯 getResponse: Is JSString? ${promptArray is JSString}');
    }

    String response;

    // Use appropriate method based on prompt type
    if (promptArray is JSString) {
      if (kDebugMode) {
        print('πŸ“ getResponse: Using generateResponse for text-only prompt');
      }
      response = (await llmInference.generateResponse(promptArray, null).toDart).toDart;
    } else {
      if (kDebugMode) {
        print('πŸ–ΌοΈ getResponse: Using generateResponseMultimodal for multimodal prompt');
      }
      response = (await llmInference.generateResponseMultimodal(promptArray, null).toDart).toDart;
    }

    if (kDebugMode) {
      print('βœ… getResponse: Successfully generated response of length ${response.length}');
      print('βœ… getResponse: Response preview: ${response.substring(0, math.min(100, response.length))}...');
    }

    // Don't add response back to promptParts - that's handled by InferenceChat
    return response;
  } catch (e, stackTrace) {
    if (kDebugMode) {
      print('❌ getResponse: Exception caught: $e');
      print('❌ getResponse: Stack trace: $stackTrace');
    }
    rethrow;
  }
}