transformToChatPrompt method

String transformToChatPrompt({
  1. ModelType type = ModelType.general,
  2. ModelFileType fileType = ModelFileType.binary,
})

Implementation

String transformToChatPrompt(
    {ModelType type = ModelType.general, ModelFileType fileType = ModelFileType.binary}) {
  // DEBUG LOG
  debugPrint('[transformToChatPrompt] modelType=$type, fileType=$fileType, messageType=${this.type}, isUser=$isUser');

  // System messages should not be sent to the model
  if (this.type == MessageType.systemInfo) {
    return '';
  }

  // .task files - MediaPipe handles templates, return raw content
  // EXCEPT FunctionGemma which needs manual formatting (no prefix/suffix in .task)
  if (fileType == ModelFileType.task && type != ModelType.functionGemma) {
    final result = _formatToolResponseContent();
    debugPrint('[transformToChatPrompt] Using _formatToolResponseContent, result length=${result.length}');
    return result;
  }

  // .litertlm files - platform-dependent behavior
  if (fileType == ModelFileType.litertlm) {
    // iOS: MediaPipe doesn't handle turn markers for .litertlm → format manually (like binary)
    // Android/Desktop/Web: LiteRT-LM SDK handles templates → return raw text (like task)
    if (!kIsWeb && defaultTargetPlatform == TargetPlatform.iOS) {
      // Fall through to manual formatting below
    } else {
      final result = _formatToolResponseContent();
      debugPrint('[transformToChatPrompt] litertlm non-iOS, using raw text, result length=${result.length}');
      return result;
    }
  }

  // .bin/.tflite files (and .litertlm on iOS) - apply manual formatting based on model type
  final result = switch (type) {
    ModelType.general => _transformGeneral(),
    ModelType.gemmaIt => _transformGemmaIt(),
    ModelType.deepSeek => _transformDeepSeek(),
    ModelType.qwen => _transformQwen(),
    ModelType.llama => _transformLlama(),
    ModelType.hammer => _transformHammer(),
    ModelType.functionGemma => _transformFunctionGemma(),
    ModelType.phi => _transformGeneral(),
  };
  return result;
}