createTokenizedPrompt static method

String createTokenizedPrompt({
  1. required String text,
  2. required ProcessedImage processedImage,
  3. required ModelType modelType,
})

Creates a properly tokenized prompt for the AI model

Implementation

static String createTokenizedPrompt({
  required String text,
  required ProcessedImage processedImage,
  required ModelType modelType,
}) {
  try {
    gemmaLog(
        'MultimodalImageHandler: Creating tokenized prompt for $modelType...');

    // Use ImageTokenizer to create properly formatted prompt
    final prompt = tokenizer.ImageTokenizer.createImagePrompt(
      text: text,
      processedImage: processedImage,
      modelType: _convertToTokenizerModelType(modelType),
    );

    // Validate the prompt contains proper image tokens
    final hasValidTokens =
        tokenizer.ImageTokenizer.validateImageTokens(prompt, 1);
    if (!hasValidTokens) {
      gemmaLog(
          'MultimodalImageHandler: Warning - Prompt may have tokenization issues');
    }

    gemmaLog(
        'MultimodalImageHandler: Tokenized prompt created (${prompt.length} chars)');

    return prompt;
  } catch (e) {
    gemmaLog('MultimodalImageHandler: Tokenization failed - $e');

    // Run the error handler for its diagnostics, then throw — returning a
    // text-only fallback prompt silently drops the image and makes the model
    // answer as if none was sent (no-silent-fallbacks).
    final errorResult = ImageErrorHandler.handleTokenizationError(
      e,
      StackTrace.current,
      modelType: _convertToTokenizerModelType(modelType),
      prompt: text,
      expectedImageCount: 1,
    );

    throw Exception('Image tokenization failed: ${errorResult.message}');
  }
}