/**
 * @license
 * Copyright 2025 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import { ImagenGenerationConfig, ImagenSafetySettings } from './requests';
/**
 * A response from the REST API is expected to look like this in the success case:
 * {
 *   "predictions": [
 *     {
 *       "mimeType": "image/png",
 *       "bytesBase64Encoded": "iVBORw0KG..."
 *     },
 *     {
 *       "mimeType": "image/png",
 *       "bytesBase64Encoded": "i4BOtw0KG..."
 *     }
 *   ]
 * }
 *
 * And like this in the failure case:
 * {
 *   "predictions": [
 *     {
 *       "raiFilteredReason": "..."
 *     }
 *   ]
 * }
 *
 * @internal
 */
export interface ImagenResponseInternal {
    predictions?: Array<{
        /**
         * The MIME type of the generated image.
         */
        mimeType?: string;
        /**
         * The image data encoded as a base64 string.
         */
        bytesBase64Encoded?: string;
        /**
         * The GCS URI where the image was stored.
         */
        gcsUri?: string;
        /**
         * The reason why the image was filtered.
         */
        raiFilteredReason?: string;
        /**
         * The safety attributes.
         *
         * This type is currently unused in the SDK. It is sent back because our requests set
         * `includeSafetyAttributes`. This property is currently only used to avoid throwing an error
         * when encountering this unsupported prediction type.
         */
        safetyAttributes?: unknown;
    }>;
}
/**
 * The parameters to be sent in the request body of the HTTP call
 * to the Vertex AI backend.
 *
 * We need a separate internal-only interface for this because the REST
 * API expects different parameter names than what we show to our users.
 *
 * Sample request body JSON:
 * {
 *   "instances": [
 *     {
 *       "prompt": "Portrait of a golden retriever on a beach."
 *     }
 *   ],
 *   "parameters": {
 *     "mimeType": "image/png",
 *     "safetyFilterLevel": "block_low_and_above",
 *     "personGeneration": "allow_all",
 *     "sampleCount": 2,
 *     "includeRaiReason": true,
 *     "includeSafetyAttributes": true,
 *     "aspectRatio": "9:16"
 *   }
 * }
 *
 * See the Google Cloud docs: https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/imagen-api#-drest
 *
 * @internal
 */
export interface PredictRequestBody {
    instances: [
        {
            prompt: string;
        }
    ];
    parameters: {
        sampleCount: number;
        aspectRatio?: string;
        outputOptions?: {
            mimeType: string;
            compressionQuality?: number;
        };
        negativePrompt?: string;
        storageUri?: string;
        addWatermark?: boolean;
        safetyFilterLevel?: string;
        personGeneration?: string;
        includeRaiReason: boolean;
        includeSafetyAttributes: boolean;
    };
}
/**
 * Contains all possible REST API paramaters that are provided by the caller.
 *
 * @internal
 */
export type ImagenGenerationParams = {
    /**
     * The Cloud Storage for Firebase bucket URI where the images should be stored
     * (for GCS requests only).
     */
    gcsURI?: string;
} & ImagenGenerationConfig & ImagenSafetySettings;
