mirror of
https://github.com/microsoft/semantic-kernel.git
synced 2026-10-12 02:19:06 +00:00
Python: Sets a valid default content filter code to ResponsibleAIPolicyViolation (#4715)
### Motivation and Context When the RAI response doesn't contain a `code` the class `ContentFilterAIException` would fail to initialize because it was setting `""` as content_filter_code. This sets `"ResponsibleAIPolicyViolation"` instead in that case. Fixes #4709 ### Contribution Checklist <!-- Before submitting this PR, please make sure: --> - [X] The code builds clean without any errors or warnings - [X] The PR follows the [SK Contribution Guidelines](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md) and the [pre-submission formatting script](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md#development-scripts) raises no violations - [X] All unit tests pass, and I have added new tests where possible - [X] I didn't break anyone 😄 Co-authored-by: Evan Mattson <[email protected]>
This commit is contained in:
co-authored by
Evan Mattson
parent
79119f1b17
commit
a5ce301656
+3
-1
@@ -75,7 +75,9 @@ class ContentFilterAIException(AIException):
|
||||
self._param = inner_exception.param
|
||||
|
||||
inner_error = inner_exception.body.get("innererror", {})
|
||||
self._content_filter_code = ContentFilterCodes(inner_error.get("code", ""))
|
||||
self._content_filter_code = ContentFilterCodes(
|
||||
inner_error.get("code", ContentFilterCodes.RESPONSIBLE_AI_POLICY_VIOLATION.value)
|
||||
)
|
||||
self._content_filter_result = dict(
|
||||
[
|
||||
key,
|
||||
|
||||
@@ -514,3 +514,50 @@ async def test_azure_chat_completion_content_filtering_raises_correct_exception(
|
||||
assert content_filter_exc.content_filter_code == ContentFilterCodes.RESPONSIBLE_AI_POLICY_VIOLATION
|
||||
assert content_filter_exc.content_filter_result["hate"].filtered
|
||||
assert content_filter_exc.content_filter_result["hate"].severity == ContentFilterResultSeverity.HIGH
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@patch.object(AsyncChatCompletions, "create")
|
||||
async def test_azure_chat_completion_content_filtering_without_response_code_raises_with_default_code(
|
||||
mock_create,
|
||||
) -> None:
|
||||
deployment_name = "test_deployment"
|
||||
endpoint = "https://test-endpoint.com"
|
||||
api_key = "test_api_key"
|
||||
api_version = "2023-03-15-preview"
|
||||
prompt = "some prompt that would trigger the content filtering"
|
||||
messages = [{"role": "user", "content": prompt}]
|
||||
complete_request_settings = AzureChatRequestSettings()
|
||||
|
||||
mock_create.side_effect = openai.BadRequestError(
|
||||
CONTENT_FILTERED_ERROR_FULL_MESSAGE,
|
||||
response=Response(400, request=Request("POST", endpoint)),
|
||||
body={
|
||||
"message": CONTENT_FILTERED_ERROR_MESSAGE,
|
||||
"type": None,
|
||||
"param": "prompt",
|
||||
"code": "content_filter",
|
||||
"status": 400,
|
||||
"innererror": {
|
||||
"content_filter_result": {
|
||||
"hate": {"filtered": True, "severity": "high"},
|
||||
"self_harm": {"filtered": False, "severity": "safe"},
|
||||
"sexual": {"filtered": False, "severity": "safe"},
|
||||
"violence": {"filtered": False, "severity": "safe"},
|
||||
},
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
azure_chat_completion = AzureChatCompletion(
|
||||
deployment_name=deployment_name,
|
||||
endpoint=endpoint,
|
||||
api_key=api_key,
|
||||
api_version=api_version,
|
||||
)
|
||||
|
||||
with pytest.raises(ContentFilterAIException, match="service encountered a content error") as exc_info:
|
||||
await azure_chat_completion.complete_chat_async(messages, complete_request_settings)
|
||||
|
||||
content_filter_exc = exc_info.value
|
||||
assert content_filter_exc.content_filter_code == ContentFilterCodes.RESPONSIBLE_AI_POLICY_VIOLATION
|
||||
|
||||
Reference in New Issue
Block a user