observe/transcribe: schema-constrain + drop shape tolerance
Add a Draft 2020-12 JSON schema for Gemini's transcribe response and
pass it via json_schema on generate(). Tighten _extract_segments to
accept only the documented {"segments": [...]} wrapper; bare-list,
array-wrapped-dict, and {"transcript": ...} fallbacks now raise.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>