Skip to main content

Google Gemini

Gemini supports structured output via response_schema. Use GEMINI_DOCUMENT_SCHEMA which omits additionalProperties (unsupported by Gemini).
from surfacedocs import SurfaceDocs, GEMINI_DOCUMENT_SCHEMA, SYSTEM_PROMPT
import google.generativeai as genai

genai.configure(api_key="...")
docs = SurfaceDocs()

model = genai.GenerativeModel(
    model_name="gemini-2.0-flash",
    system_instruction=SYSTEM_PROMPT,
    generation_config=genai.GenerationConfig(
        response_mime_type="application/json",
        response_schema=GEMINI_DOCUMENT_SCHEMA,
    ),
)

response = model.generate_content("Write documentation for user authentication")
result = docs.save(response.text)
print(f"Saved: {result.url}")
GEMINI_DOCUMENT_SCHEMA is specifically designed for Gemini — it removes additionalProperties fields that Gemini doesn’t support and uses explicit metadata property definitions.

Why a separate schema?

Gemini’s structured output has different constraints than OpenAI:
FeatureOpenAIGemini
additionalPropertiesRequired for strict modeNot supported
Nullable types"type": ["string", "null"]Not needed
All fields requiredYes (strict mode)No
The GEMINI_DOCUMENT_SCHEMA handles these differences so you don’t have to.