providers: add json_schema parameter with advisory validation
Adds an optional `json_schema: dict | None` parameter to generate(),
agenerate(), and generate_with_result() in think/models.py and threads
it through all four provider modules. Each provider translates to its
native structured-output mechanism (Gemini response_json_schema, OpenAI
Responses text.format.json_schema, Anthropic output_config with
forced-tool-use fallback on BadRequestError, Ollama dict format).
After the call, an advisory jsonschema.validate pass logs violations
and surfaces a schema_validation field on GenerateResult from
generate_with_result; it never raises and never mutates the returned
text. When json_schema is None, every provider's SDK kwargs are
byte-for-byte identical to before. Lode 1 of 3 — talents and callers
unchanged.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>