diff --git a/src/a2a/compat/v0_3/jsonrpc_adapter.py b/src/a2a/compat/v0_3/jsonrpc_adapter.py index 04df1d0d0..2263f336b 100644 --- a/src/a2a/compat/v0_3/jsonrpc_adapter.py +++ b/src/a2a/compat/v0_3/jsonrpc_adapter.py @@ -31,7 +31,7 @@ InternalError as CoreInternalError, ) from a2a.server.jsonrpc_models import ( - InvalidRequestError as CoreInvalidRequestError, + InvalidParamsError as CoreInvalidParamsError, ) from a2a.server.jsonrpc_models import ( JSONRPCError as CoreJSONRPCError, @@ -128,7 +128,7 @@ async def handle_request( return self._generate_error_response( request_id, - CoreInvalidRequestError(data=str(e)), + CoreInvalidParamsError(data=str(e)), ) call_context = self._context_builder.build(request) diff --git a/tests/compat/v0_3/test_jsonrpc_app_compat.py b/tests/compat/v0_3/test_jsonrpc_app_compat.py index aec4a56ee..833f6c607 100644 --- a/tests/compat/v0_3/test_jsonrpc_app_compat.py +++ b/tests/compat/v0_3/test_jsonrpc_app_compat.py @@ -205,6 +205,25 @@ def test_get_task_not_found_v03_compat( assert data['error']['message'] == 'Task not found' +def test_invalid_params_v03_compat( + client: TestClient, mock_handler: AsyncMock +) -> None: + request_payload = { + 'jsonrpc': '2.0', + 'id': '7', + 'method': 'message/send', + 'params': {'message': {'messageId': 'req', 'role': 'user'}}, + } + + response = client.post('/', json=request_payload) + assert response.status_code == 200 + data = response.json() + + assert data['id'] == '7' + assert data['error']['code'] == -32602 + mock_handler.on_message_send.assert_not_called() + + @pytest.mark.parametrize( ('error', 'expected_code'), [