hulincup opened a new pull request, #1032:
URL: https://github.com/apache/flink-agents/pull/1032

   ## Description
   
   Fixes #985
   
   When a BaseModel contains fields that cannot be serialized to JSON schema 
(e.g., `Callable` fields), the `to_strict_json_schema()` function raises 
`PydanticInvalidForJsonSchema`. Currently, this exception propagates up and 
breaks the chat call.
   
   The issue description notes that `RowTypeInfo` schemas gracefully fall back 
to prompt engineering when the connection can't translate them natively, but 
`BaseModel` schemas that can't be serialized raise an exception instead. This 
inconsistency should be fixed.
   
   ## Changes
   
   This PR catches `PydanticInvalidForJsonSchema` in the three connection types 
that use `to_strict_json_schema()` or `transform_schema()`:
   
   1. **OpenAI** (`openai_chat_model.py`):
      - Catches exception in `_native_response_format()`
      - Falls back to prompt engineering (returns `None`)
      - Logs a warning message
      - Added `logger` import
   
   2. **Azure OpenAI** (`azure_openai_chat_model.py`):
      - Catches exception in `_native_response_format()`
      - Falls back to prompt engineering (returns `None`)
      - Logs a warning message
      - Updated docstring to document the fallback behavior
   
   3. **Anthropic** (`anthropic_chat_model.py`):
      - Catches exception in `_native_output_config()`
      - Falls back to prompt engineering (returns `None`)
      - Logs a warning message
      - Updated docstring to document the fallback behavior
   
   ## Testing
   
   Added comprehensive test file `test_unserializable_output_schema.py` with 
three test cases:
   
   - `test_openai_handles_unserializable_schema()`: Verifies OpenAI falls back 
to prompt when schema cannot be serialized
   - `test_azure_handles_unserializable_schema()`: Verifies Azure falls back to 
prompt when schema cannot be serialized
   - `test_anthropic_handles_unserializable_schema()`: Verifies Anthropic falls 
back to prompt when schema cannot be serialized
   
   Each test uses a `BadModel` with a `Callable` field that cannot be converted 
to JSON schema, and verifies that:
   1. No exception is raised
   2. The native structured output format is not included in the request 
(fallback to prompt engineering)
   
   ## Verification
   
   The fix ensures that:
   - Connections handle unserializable `BaseModel` schemas gracefully
   - Behavior is consistent with `RowTypeInfo` fallback
   - Users receive a warning log when fallback occurs
   - Existing functionality for serializable schemas is unchanged
   
   ## Related Issues
   
   - Fixes #985


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to