{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://github.com/api-search/google-gemini/json-schema/google-gemini-generate-content-schema.json",
  "title": "Google Gemini Generate Content Schema",
  "description": "JSON Schema definitions for the Google Gemini API generateContent request and response objects, covering all core models including Content, Part, GenerationConfig, SafetySetting, Candidate, and UsageMetadata.",
  "type": "object",
  "$defs": {
    "Blob": {
      "type": "object",
      "description": "Raw media bytes with MIME type information for inline media content.",
      "properties": {
        "mimeType": {
          "type": "string",
          "description": "The IANA standard MIME type of the source data. Examples: image/png, image/jpeg, audio/mp3, video/mp4."
        },
        "data": {
          "type": "string",
          "contentEncoding": "base64",
          "description": "Raw bytes for media formats encoded as a base64 string."
        }
      },
      "required": ["mimeType", "data"]
    },
    "FileData": {
      "type": "object",
      "description": "URI-based reference for media uploaded via the Files API.",
      "properties": {
        "mimeType": {
          "type": "string",
          "description": "The IANA standard MIME type of the source data."
        },
        "fileUri": {
          "type": "string",
          "format": "uri",
          "description": "URI of the file uploaded via the Files API."
        }
      },
      "required": ["mimeType", "fileUri"]
    },
    "FunctionCall": {
      "type": "object",
      "description": "A predicted function call returned from the model containing the function name and arguments.",
      "properties": {
        "name": {
          "type": "string",
          "description": "The name of the function to call.",
          "pattern": "^[a-zA-Z0-9_-]{1,63}$"
        },
        "args": {
          "type": "object",
          "description": "The function parameters and values in JSON object format.",
          "additionalProperties": true
        }
      },
      "required": ["name"]
    },
    "FunctionResponse": {
      "type": "object",
      "description": "The result output from a FunctionCall containing the function name and structured JSON response.",
      "properties": {
        "name": {
          "type": "string",
          "description": "The name of the function that was called.",
          "pattern": "^[a-zA-Z0-9_-]{1,63}$"
        },
        "response": {
          "type": "object",
          "description": "The function response in JSON object format.",
          "additionalProperties": true
        }
      },
      "required": ["name", "response"]
    },
    "Part": {
      "type": "object",
      "description": "A datatype containing media that is part of a multi-part Content message. A Part can contain text, inline media data, file references, function calls, or function responses.",
      "properties": {
        "text": {
          "type": "string",
          "description": "Inline text content."
        },
        "inlineData": {
          "$ref": "#/$defs/Blob"
        },
        "fileData": {
          "$ref": "#/$defs/FileData"
        },
        "functionCall": {
          "$ref": "#/$defs/FunctionCall"
        },
        "functionResponse": {
          "$ref": "#/$defs/FunctionResponse"
        }
      },
      "oneOf": [
        { "required": ["text"] },
        { "required": ["inlineData"] },
        { "required": ["fileData"] },
        { "required": ["functionCall"] },
        { "required": ["functionResponse"] }
      ]
    },
    "Content": {
      "type": "object",
      "description": "The base structured datatype containing multi-part content of a message. Includes a role field designating the producer and a parts field with the message data.",
      "properties": {
        "parts": {
          "type": "array",
          "description": "Ordered parts that constitute a single message. Parts may have different MIME types.",
          "items": {
            "$ref": "#/$defs/Part"
          },
          "minItems": 1
        },
        "role": {
          "type": "string",
          "description": "The producer of the content. Must be either 'user' or 'model'.",
          "enum": ["user", "model"]
        }
      },
      "required": ["parts"]
    },
    "FunctionDeclaration": {
      "type": "object",
      "description": "Structured representation of a function declaration including the function name, description, and parameters.",
      "properties": {
        "name": {
          "type": "string",
          "description": "The name of the function.",
          "pattern": "^[a-zA-Z0-9_-]{1,63}$"
        },
        "description": {
          "type": "string",
          "description": "A brief description of the function."
        },
        "parameters": {
          "type": "object",
          "description": "Describes the parameters to this function using OpenAPI 3.0 Parameter Object format.",
          "additionalProperties": true
        }
      },
      "required": ["name", "description"]
    },
    "Tool": {
      "type": "object",
      "description": "Tool details that the model may use to generate responses, including function declarations and code execution.",
      "properties": {
        "functionDeclarations": {
          "type": "array",
          "description": "A list of function declarations available to the model for function calling.",
          "items": {
            "$ref": "#/$defs/FunctionDeclaration"
          }
        },
        "codeExecution": {
          "type": "object",
          "description": "Enables the model to execute code as part of generation. Pass an empty object to enable."
        }
      }
    },
    "FunctionCallingConfig": {
      "type": "object",
      "description": "Configuration for specifying function calling behavior.",
      "properties": {
        "mode": {
          "type": "string",
          "description": "Specifies the mode in which function calling should execute.",
          "enum": ["MODE_UNSPECIFIED", "AUTO", "ANY", "NONE"]
        },
        "allowedFunctionNames": {
          "type": "array",
          "description": "Function names that limit which functions the model will call. Only applicable when mode is ANY.",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "ToolConfig": {
      "type": "object",
      "description": "Configuration containing parameters for specifying Tool use in the request.",
      "properties": {
        "functionCallingConfig": {
          "$ref": "#/$defs/FunctionCallingConfig"
        }
      }
    },
    "HarmCategory": {
      "type": "string",
      "description": "The category of harm that a safety setting or rating applies to.",
      "enum": [
        "HARM_CATEGORY_UNSPECIFIED",
        "HARM_CATEGORY_HATE_SPEECH",
        "HARM_CATEGORY_SEXUALLY_EXPLICIT",
        "HARM_CATEGORY_DANGEROUS_CONTENT",
        "HARM_CATEGORY_HARASSMENT",
        "HARM_CATEGORY_CIVIC_INTEGRITY"
      ]
    },
    "SafetySetting": {
      "type": "object",
      "description": "Safety setting that affects the safety-blocking behavior. Controls the probability threshold at which content is blocked for a given harm category.",
      "properties": {
        "category": {
          "$ref": "#/$defs/HarmCategory"
        },
        "threshold": {
          "type": "string",
          "description": "Controls the probability threshold at which harm is blocked.",
          "enum": [
            "HARM_BLOCK_THRESHOLD_UNSPECIFIED",
            "BLOCK_LOW_AND_ABOVE",
            "BLOCK_MEDIUM_AND_ABOVE",
            "BLOCK_ONLY_HIGH",
            "BLOCK_NONE",
            "OFF"
          ]
        }
      },
      "required": ["category", "threshold"]
    },
    "GenerationConfig": {
      "type": "object",
      "description": "Configuration options for model generation and outputs including temperature, token limits, sampling parameters, and structured output settings.",
      "properties": {
        "candidateCount": {
          "type": "integer",
          "description": "Number of generated responses to return. Currently can only be set to 1.",
          "minimum": 1,
          "maximum": 1,
          "default": 1
        },
        "stopSequences": {
          "type": "array",
          "description": "Character sequences (up to 5) that will stop output generation.",
          "items": {
            "type": "string"
          },
          "maxItems": 5
        },
        "maxOutputTokens": {
          "type": "integer",
          "description": "The maximum number of tokens to include in a response candidate.",
          "minimum": 1
        },
        "temperature": {
          "type": "number",
          "description": "Controls the randomness of the output. Values range from 0.0 to 2.0.",
          "minimum": 0.0,
          "maximum": 2.0
        },
        "topP": {
          "type": "number",
          "description": "The maximum cumulative probability of tokens to consider when sampling (nucleus sampling).",
          "minimum": 0.0,
          "maximum": 1.0
        },
        "topK": {
          "type": "integer",
          "description": "The maximum number of tokens to consider when sampling.",
          "minimum": 1
        },
        "responseMimeType": {
          "type": "string",
          "description": "MIME type of the generated candidate text. Supported: text/plain, application/json, text/x.enum.",
          "enum": ["text/plain", "application/json", "text/x.enum"]
        },
        "responseSchema": {
          "type": "object",
          "description": "Output schema of the generated candidate text when using structured output (application/json).",
          "additionalProperties": true
        },
        "presencePenalty": {
          "type": "number",
          "description": "Positive values penalize tokens that have already appeared, increasing diversity."
        },
        "frequencyPenalty": {
          "type": "number",
          "description": "Positive values penalize tokens based on frequency, decreasing verbatim repetition."
        },
        "seed": {
          "type": "integer",
          "description": "Seed for deterministic decoding. Same seed and parameters will attempt to return the same response."
        }
      }
    },
    "SafetyRating": {
      "type": "object",
      "description": "Safety rating for content containing the harm category, probability level, and whether it was blocked.",
      "properties": {
        "category": {
          "$ref": "#/$defs/HarmCategory"
        },
        "probability": {
          "type": "string",
          "description": "The probability of harm for this content.",
          "enum": [
            "HARM_PROBABILITY_UNSPECIFIED",
            "NEGLIGIBLE",
            "LOW",
            "MEDIUM",
            "HIGH"
          ]
        },
        "blocked": {
          "type": "boolean",
          "description": "Whether this content was blocked because of this rating."
        }
      },
      "required": ["category", "probability"]
    },
    "CitationSource": {
      "type": "object",
      "description": "A citation to a source for a portion of a specific response.",
      "properties": {
        "startIndex": {
          "type": "integer",
          "description": "Start index of the response segment attributed to this source."
        },
        "endIndex": {
          "type": "integer",
          "description": "End index of the attributed segment, exclusive."
        },
        "uri": {
          "type": "string",
          "format": "uri",
          "description": "URI attributed as a source."
        },
        "license": {
          "type": "string",
          "description": "License for the source project."
        }
      }
    },
    "CitationMetadata": {
      "type": "object",
      "description": "A collection of source attributions for a piece of content.",
      "properties": {
        "citationSources": {
          "type": "array",
          "description": "Citations to sources for a specific response.",
          "items": {
            "$ref": "#/$defs/CitationSource"
          }
        }
      }
    },
    "Candidate": {
      "type": "object",
      "description": "A response candidate generated from the model containing the generated content, finish reason, safety ratings, and citation metadata.",
      "properties": {
        "content": {
          "$ref": "#/$defs/Content"
        },
        "finishReason": {
          "type": "string",
          "description": "The reason why the model stopped generating tokens.",
          "enum": [
            "FINISH_REASON_UNSPECIFIED",
            "STOP",
            "MAX_TOKENS",
            "SAFETY",
            "RECITATION",
            "LANGUAGE",
            "OTHER",
            "BLOCKLIST",
            "PROHIBITED_CONTENT",
            "SPII",
            "MALFORMED_FUNCTION_CALL"
          ]
        },
        "safetyRatings": {
          "type": "array",
          "description": "Safety ratings for the response candidate.",
          "items": {
            "$ref": "#/$defs/SafetyRating"
          }
        },
        "citationMetadata": {
          "$ref": "#/$defs/CitationMetadata"
        },
        "tokenCount": {
          "type": "integer",
          "description": "Token count for this candidate."
        },
        "index": {
          "type": "integer",
          "description": "Index of the candidate in the list of response candidates."
        }
      }
    },
    "PromptFeedback": {
      "type": "object",
      "description": "Feedback metadata for the prompt, including block reason and safety ratings.",
      "properties": {
        "blockReason": {
          "type": "string",
          "description": "If set, the prompt was blocked and no candidates are returned.",
          "enum": [
            "BLOCK_REASON_UNSPECIFIED",
            "SAFETY",
            "OTHER",
            "BLOCKLIST",
            "PROHIBITED_CONTENT"
          ]
        },
        "safetyRatings": {
          "type": "array",
          "description": "Ratings for safety of the prompt.",
          "items": {
            "$ref": "#/$defs/SafetyRating"
          }
        }
      }
    },
    "UsageMetadata": {
      "type": "object",
      "description": "Token usage metadata for the generation request.",
      "properties": {
        "promptTokenCount": {
          "type": "integer",
          "description": "Number of tokens in the prompt."
        },
        "candidatesTokenCount": {
          "type": "integer",
          "description": "Total number of tokens across all generated response candidates."
        },
        "totalTokenCount": {
          "type": "integer",
          "description": "Total token count for the generation request (prompt plus response candidates)."
        },
        "cachedContentTokenCount": {
          "type": "integer",
          "description": "Number of tokens in the cached part of the prompt."
        }
      }
    },
    "GenerateContentRequest": {
      "type": "object",
      "description": "Request body for the generateContent endpoint. Contains the conversation content, optional tools, safety settings, system instructions, and generation configuration.",
      "properties": {
        "contents": {
          "type": "array",
          "description": "Required. The content of the current conversation with the model.",
          "items": {
            "$ref": "#/$defs/Content"
          },
          "minItems": 1
        },
        "tools": {
          "type": "array",
          "description": "Tools the model may use to generate the next response.",
          "items": {
            "$ref": "#/$defs/Tool"
          }
        },
        "toolConfig": {
          "$ref": "#/$defs/ToolConfig"
        },
        "safetySettings": {
          "type": "array",
          "description": "Safety settings for blocking unsafe content.",
          "items": {
            "$ref": "#/$defs/SafetySetting"
          }
        },
        "systemInstruction": {
          "$ref": "#/$defs/Content"
        },
        "generationConfig": {
          "$ref": "#/$defs/GenerationConfig"
        },
        "cachedContent": {
          "type": "string",
          "description": "Name of the cached content used as context. Format: cachedContents/{cachedContent}."
        }
      },
      "required": ["contents"]
    },
    "GenerateContentResponse": {
      "type": "object",
      "description": "Response from the generateContent endpoint containing candidate responses, prompt feedback, and usage metadata.",
      "properties": {
        "candidates": {
          "type": "array",
          "description": "Candidate responses from the model.",
          "items": {
            "$ref": "#/$defs/Candidate"
          }
        },
        "promptFeedback": {
          "$ref": "#/$defs/PromptFeedback"
        },
        "usageMetadata": {
          "$ref": "#/$defs/UsageMetadata"
        },
        "modelVersion": {
          "type": "string",
          "description": "The model version used to generate the response."
        },
        "responseId": {
          "type": "string",
          "description": "Unique identifier for the response."
        }
      }
    }
  }
}
