元渊 API元渊 API
Error Handling Guide

Code Implementation Examples

Complete error handling code examples

Full Response Parser

async function processGeminiResponse(data) {
    // 1. Check candidatesTokenCount (highest priority)
    if (data.usageMetadata?.candidatesTokenCount === 0) {
        return {
            success: false,
            errorType: 'ZERO_CANDIDATES_TOKEN',
            userMessage: 'Content review failed, please modify and retry'
        };
    }
    
    // 2. Check candidates
    if (!data.candidates || !data.candidates.length) {
        return {
            success: false,
            errorType: 'NO_CANDIDATES',
            userMessage: 'System error, please retry later'
        };
    }
    
    const candidate = data.candidates[0];
    
    // 3. Check finishReason
    if (candidate.finishReason && candidate.finishReason !== 'STOP') {
        return {
            success: false,
            errorType: 'FINISH_REASON',
            finishReason: candidate.finishReason,
            userMessage: getFinishReasonMessage(candidate.finishReason)
        };
    }
    
    // 4. Extract images and texts
    const parts = candidate.content?.parts || [];
    const images = [];
    const texts = [];
    
    for (const part of parts) {
        if (part.inlineData?.data) {
            images.push(`data:${part.inlineData.mimeType};base64,${part.inlineData.data}`);
        }
        if (part.text) {
            texts.push(part.text);
        }
    }
    
    // 5. Check for images
    if (images.length > 0) {
        return { success: true, images };
    }
    
    // 6. Text response
    if (texts.length > 0) {
        return {
            success: false,
            errorType: 'TEXT_RESPONSE',
            userMessage: texts.join('\\n')
        };
    }
    
    // 7. Unknown error
    return {
        success: false,
        errorType: 'UNKNOWN',
        userMessage: 'Generation failed, please retry'
    };
}

function getFinishReasonMessage(finishReason) {
    const messages = {
        'PROHIBITED_CONTENT': 'Content violates safety policy',
        'SAFETY': 'Content triggered safety filter',
        'RECITATION': 'Possible copyright issue',
        'MAX_TOKENS': 'Content too long'
    };
    return messages[finishReason] || `Rejected: ${finishReason}`;
}

Usage Example

// Call API
const response = await fetch(API_URL, {
    method: 'POST',
    headers: headers,
    body: JSON.stringify(payload)
});

const data = await response.json();

// Process response
const result = processGeminiResponse(data);

if (result.success) {
    displayImages(result.images);
} else {
    showErrorMessage(result);
}

Error Display

function showErrorMessage(error) {
    const { errorType, userMessage } = error;
    
    const errorConfig = {
        'ZERO_CANDIDATES_TOKEN': {
            title: 'Content Review Failed',
            icon: '🚫',
            color: '#f44336'
        },
        'FINISH_REASON': {
            title: 'Generation Rejected',
            icon: '⚠️',
            color: '#ff9800'
        },
        'TEXT_RESPONSE': {
            title: 'Unable to Generate Image',
            icon: '💬',
            color: '#2196f3'
        }
    };
    
    const config = errorConfig[errorType] || {
        title: 'Error',
        icon: '❌',
        color: '#9e9e9e'
    };
    
    showModal({
        ...config,
        message: userMessage
    });
}

How is this guide?