{"created": 1784546348.7233393, "duration": 4161.385337591171, "exitcode": 1, "root": "/workspace/source/test/e2e", "environment": {}, "summary": {"passed": 47, "skipped": 12, "failed": 2, "total": 61, "collected": 61}, "collectors": [{"nodeid": "explainer/test_art_explainer.py", "outcome": "skipped", "result": [], "longrepr": "('/workspace/source/test/e2e/explainer/test_art_explainer.py', 38, 'Skipped: ODH does not support art explainer at the moment')"}, {"nodeid": "predictor/test_grpc.py", "outcome": "skipped", "result": [], "longrepr": "('/workspace/source/test/e2e/predictor/test_grpc.py', 35, 'Skipped: Not testable in ODH at the moment')"}, {"nodeid": "predictor/test_torchserve.py", "outcome": "skipped", "result": [], "longrepr": "('/workspace/source/test/e2e/predictor/test_torchserve.py', 34, 'Skipped: ODH does not support torchserve at the moment')"}], "tests": [{"nodeid": "batcher/test_batcher.py::test_batcher", "lineno": 30, "outcome": "passed", "keywords": ["test_batcher", "asyncio", "predictor", "pytestmark", "test_batcher.py", "batcher/__init__.py", "e2e"], "setup": {"duration": 0.05094683601055294, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 105.4142016400001, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 0.00018991599790751934, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "batcher/test_batcher_custom_port.py::test_batcher_custom_port", "lineno": 32, "outcome": "passed", "keywords": ["test_batcher_custom_port", "asyncio", "predictor", "pytestmark", "test_batcher_custom_port.py", "batcher/__init__.py", "e2e"], "setup": {"duration": 0.04178663800121285, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 95.22574356700352, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 0.00018610499682836235, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "custom/test_custom_model_grpc.py::test_custom_model_grpc", "lineno": 41, "outcome": "skipped", "keywords": ["test_custom_model_grpc", "asyncio", "predictor", "grpc", "skip", "pytestmark", "test_custom_model_grpc.py", "custom/__init__.py", "e2e"], "setup": {"duration": 0.00012805400183424354, "outcome": "skipped", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python\n('/workspace/source/test/e2e/custom/test_custom_model_grpc.py', 42, 'Skipped: Not testable in ODH at the moment')"}, "teardown": {"duration": 0.00010633299825713038, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "custom/test_ray.py::test_custom_model_http_ray", "lineno": 29, "outcome": "skipped", "keywords": ["test_custom_model_http_ray", "asyncio", "predictor", "skip", "pytestmark", "test_ray.py", "custom/__init__.py", "e2e"], "setup": {"duration": 0.00012772400805260986, "outcome": "skipped", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python\n('/workspace/source/test/e2e/custom/test_ray.py', 30, 'Skipped: Not testable in ODH at the moment')"}, "teardown": {"duration": 0.00010349199874326587, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "logger/test_logger.py::test_kserve_logger", "lineno": 33, "outcome": "passed", "keywords": ["test_kserve_logger", "asyncio", "path_based_routing", "predictor", "pytestmark", "test_logger.py", "logger/__init__.py", "e2e"], "setup": {"duration": 0.045129160993383266, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 105.29393835600058, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 0.0002558470005169511, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_autogluon.py::test_autogluon_runtime_kserve_v1", "lineno": 57, "outcome": "passed", "keywords": ["test_autogluon_runtime_kserve_v1", "asyncio", "predictor", "autogluon", "pytestmark", "test_autogluon.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.042333338991738856, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 166.25651597499382, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.057806098004221, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_autogluon.py::test_autogluon_runtime_kserve_v2", "lineno": 74, "outcome": "passed", "keywords": ["test_autogluon_runtime_kserve_v2", "asyncio", "predictor", "autogluon", "pytestmark", "test_autogluon.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.048833398992428556, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 146.18689347899635, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.0631025320035405, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_autogluon.py::test_autogluon_runtime_kserve_v2_input_variants", "lineno": 91, "outcome": "passed", "keywords": ["test_autogluon_runtime_kserve_v2_input_variants", "asyncio", "predictor", "autogluon", "pytestmark", "test_autogluon.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.046678692000568844, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 106.60077985200041, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.054037708003307, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_autogluon.py::test_autogluon_runtime_kserve_v2_storage_uri_without_trailing_slash", "lineno": 112, "outcome": "passed", "keywords": ["test_autogluon_runtime_kserve_v2_storage_uri_without_trailing_slash", "asyncio", "predictor", "autogluon", "pytestmark", "test_autogluon.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.04760251099651214, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 146.20624880799733, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.055696737006656, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_autogluon_timeseries.py::test_autogluon_timeseries_runtime_kserve_v1", "lineno": 78, "outcome": "passed", "keywords": ["test_autogluon_timeseries_runtime_kserve_v1", "asyncio", "predictor", "autogluon", "pytestmark", "test_autogluon_timeseries.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.03493726399028674, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 42.19969352199405, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.0552079360059, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_autogluon_timeseries.py::test_autogluon_timeseries_runtime_kserve_v1_storage_uri_without_trailing_slash", "lineno": 93, "outcome": "passed", "keywords": ["test_autogluon_timeseries_runtime_kserve_v1_storage_uri_without_trailing_slash", "asyncio", "predictor", "autogluon", "pytestmark", "test_autogluon_timeseries.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.04733465300523676, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 35.18327402199793, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.055669602996204, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_autoscaling.py::test_sklearn_kserve_concurrency", "lineno": 52, "outcome": "skipped", "keywords": ["test_sklearn_kserve_concurrency", "skip", "asyncio", "predictor", "pytestmark", "test_autoscaling.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.00022559599892701954, "outcome": "skipped", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python\n('/workspace/source/test/e2e/predictor/test_autoscaling.py', 53, 'Skipped: We do not test anymore with Knative')"}, "teardown": {"duration": 0.00012727400462608784, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_autoscaling.py::test_sklearn_kserve_rps", "lineno": 102, "outcome": "skipped", "keywords": ["test_sklearn_kserve_rps", "skip", "asyncio", "predictor", "pytestmark", "test_autoscaling.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.00012519299343694001, "outcome": "skipped", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python\n('/workspace/source/test/e2e/predictor/test_autoscaling.py', 103, 'Skipped: We do not test anymore with Knative')"}, "teardown": {"duration": 0.00010787299834191799, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_canary.py::test_canary_rollout", "lineno": 33, "outcome": "skipped", "keywords": ["test_canary_rollout", "skip", "path_based_routing", "predictor", "pytestmark", "test_canary.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.00010553299216553569, "outcome": "skipped", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python\n('/workspace/source/test/e2e/predictor/test_canary.py', 34, 'Skipped: Canary rollouts require Knative Serving and are not supported in RawDeployment mode')"}, "teardown": {"duration": 9.586199303157628e-05, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_canary.py::test_canary_rollout_runtime", "lineno": 106, "outcome": "skipped", "keywords": ["test_canary_rollout_runtime", "skip", "path_based_routing", "predictor", "pytestmark", "test_canary.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.000101373007055372, "outcome": "skipped", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python\n('/workspace/source/test/e2e/predictor/test_canary.py', 107, 'Skipped: Canary rollouts require Knative Serving and are not supported in RawDeployment mode')"}, "teardown": {"duration": 0.00010626300354488194, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_lightgbm.py::test_lightgbm_kserve", "lineno": 36, "outcome": "passed", "keywords": ["test_lightgbm_kserve", "asyncio", "path_based_routing", "predictor", "pytestmark", "test_lightgbm.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.04895512700022664, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 90.20757950600819, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.0508145640051225, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_lightgbm.py::test_lightgbm_runtime_kserve", "lineno": 81, "outcome": "passed", "keywords": ["test_lightgbm_runtime_kserve", "asyncio", "path_based_routing", "predictor", "pytestmark", "test_lightgbm.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.036963100006687455, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 90.630294994, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.058338408998679, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_lightgbm.py::test_lightgbm_v2_runtime_mlserver", "lineno": 145, "outcome": "passed", "keywords": ["test_lightgbm_v2_runtime_mlserver", "asyncio", "path_based_routing", "predictor", "pytestmark", "test_lightgbm.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.04668650499661453, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 180.2647068219958, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.05013511099969, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_lightgbm.py::test_lightgbm_v2_kserve", "lineno": 211, "outcome": "passed", "keywords": ["test_lightgbm_v2_kserve", "asyncio", "path_based_routing", "predictor", "pytestmark", "test_lightgbm.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.04453003000526223, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 20.16155870599323, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.053539737011306, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_lightgbm.py::test_lightgbm_v2_grpc", "lineno": 269, "outcome": "skipped", "keywords": ["test_lightgbm_v2_grpc", "asyncio", "predictor", "grpc", "skip", "pytestmark", "test_lightgbm.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.00015638400509487838, "outcome": "skipped", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python\n('/workspace/source/test/e2e/predictor/test_lightgbm.py', 270, 'Skipped: Not testable in ODH at the moment')"}, "teardown": {"duration": 0.00010553299216553569, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_mlflow.py::test_mlflow_v2_runtime_kserve", "lineno": 32, "outcome": "passed", "keywords": ["test_mlflow_v2_runtime_kserve", "asyncio", "predictor", "pytestmark", "test_mlflow.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.04209322700626217, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 50.17709788499633, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.050359027009108, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_multi_container_probing.py::test_multi_container_probing", "lineno": 60, "outcome": "passed", "keywords": ["test_multi_container_probing", "asyncio", "kserve_on_openshift", "pytestmark", "test_multi_container_probing.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.039251745998626575, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 80.17748767900048, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.053554363999865, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_paddle.py::test_paddle", "lineno": 36, "outcome": "passed", "keywords": ["test_paddle", "asyncio", "predictor", "pytestmark", "test_paddle.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.03907064700615592, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 71.7402065560018, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.05517305500689, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_paddle.py::test_paddle_runtime", "lineno": 89, "outcome": "passed", "keywords": ["test_paddle_runtime", "asyncio", "predictor", "pytestmark", "test_paddle.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.03878445000736974, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 61.71552376600448, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.055312682990916, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_paddle.py::test_paddle_v2_kserve", "lineno": 145, "outcome": "passed", "keywords": ["test_paddle_v2_kserve", "asyncio", "predictor", "pytestmark", "test_paddle.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.04279280299670063, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 62.098521594001795, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.058157268009381, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_paddle.py::test_paddle_v2_grpc", "lineno": 205, "outcome": "skipped", "keywords": ["test_paddle_v2_grpc", "skip", "asyncio", "predictor", "pytestmark", "test_paddle.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.00017051500617526472, "outcome": "skipped", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python\n('/workspace/source/test/e2e/predictor/test_paddle.py', 206, 'Skipped: GRPC tests are failing in ODH at the moment')"}, "teardown": {"duration": 0.0001279639982385561, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_pmml.py::test_pmml_kserve", "lineno": 34, "outcome": "passed", "keywords": ["test_pmml_kserve", "asyncio", "predictor", "pytestmark", "test_pmml.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.0356866059883032, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 91.19413727300707, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.078664753003977, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_pmml.py::test_pmml_runtime_kserve", "lineno": 89, "outcome": "passed", "keywords": ["test_pmml_runtime_kserve", "asyncio", "predictor", "pytestmark", "test_pmml.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.03943530601100065, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 81.37204270299117, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.0643789199966704, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_pmml.py::test_pmml_v2_kserve", "lineno": 143, "outcome": "passed", "keywords": ["test_pmml_v2_kserve", "asyncio", "predictor", "pytestmark", "test_pmml.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.0454196979990229, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 91.0103413600009, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.075439576990902, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_pmml.py::test_pmml_v2_grpc", "lineno": 223, "outcome": "skipped", "keywords": ["test_pmml_v2_grpc", "asyncio", "predictor", "grpc", "skip", "pytestmark", "test_pmml.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.00023602700093761086, "outcome": "skipped", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python\n('/workspace/source/test/e2e/predictor/test_pmml.py', 224, 'Skipped: Not testable in ODH at the moment')"}, "teardown": {"duration": 0.00020363600924611092, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_pod_watch.py::test_event_storm_prevention_init_container_isolation", "lineno": 329, "outcome": "passed", "keywords": ["test_event_storm_prevention_init_container_isolation", "asyncio", "raw", "predictor", "pytestmark", "test_pod_watch.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.042589361997670494, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 121.37094456100021, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.066014159005135, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_pod_watch.py::test_quick_reconciliation_on_init_container_failure", "lineno": 463, "outcome": "passed", "keywords": ["test_quick_reconciliation_on_init_container_failure", "asyncio", "raw", "predictor", "pytestmark", "test_pod_watch.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.04121971900167409, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 10.21978106199822, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.0488047980034025, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_predictive.py::test_predictive_sklearn_v1", "lineno": 34, "outcome": "passed", "keywords": ["test_predictive_sklearn_v1", "asyncio", "predictor", "pytestmark", "test_predictive.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.03449387100408785, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 110.21853513400129, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.055314794997685, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_predictive.py::test_predictive_xgboost_v1", "lineno": 79, "outcome": "passed", "keywords": ["test_predictive_xgboost_v1", "asyncio", "predictor", "pytestmark", "test_predictive.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.04004103399347514, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 90.19365527700575, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.053046921006171, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_predictive.py::test_predictive_lightgbm_v1", "lineno": 124, "outcome": "passed", "keywords": ["test_predictive_lightgbm_v1", "asyncio", "predictor", "pytestmark", "test_predictive.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.05676166800549254, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 90.23226963500201, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.05466932800482, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_predictive.py::test_predictive_sklearn_v2", "lineno": 170, "outcome": "passed", "keywords": ["test_predictive_sklearn_v2", "asyncio", "predictor", "pytestmark", "test_predictive.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.040090907001285814, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 100.19922354099981, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.052203863990144, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_predictive.py::test_predictive_xgboost_v2", "lineno": 225, "outcome": "passed", "keywords": ["test_predictive_xgboost_v2", "asyncio", "predictor", "pytestmark", "test_predictive.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.05137517700495664, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 90.18122899999435, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.056747012989945, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_predictive.py::test_predictive_lightgbm_v2", "lineno": 280, "outcome": "passed", "keywords": ["test_predictive_lightgbm_v2", "asyncio", "predictor", "pytestmark", "test_predictive.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.042243841002346016, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 90.17337545700138, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.052973270008806, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_scheduler_name.py::test_scheduler_name", "lineno": 46, "outcome": "passed", "keywords": ["test_scheduler_name", "asyncio", "kserve_on_openshift", "pytestmark", "test_scheduler_name.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.037912266998318955, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 2.105805473998771, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.043448224008898, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_sklearn.py::test_sklearn_kserve", "lineno": 42, "outcome": "passed", "keywords": ["test_sklearn_kserve", "asyncio", "predictor", "pytestmark", "test_sklearn.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.040013078003539704, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 90.19866922700021, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.059538562010857, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_sklearn.py::test_sklearn_v2_mlserver", "lineno": 86, "outcome": "passed", "keywords": ["test_sklearn_v2_mlserver", "asyncio", "predictor", "pytestmark", "test_sklearn.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.044598635999136604, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 60.22088661699672, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.054559960990446, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_sklearn.py::test_sklearn_runtime_kserve", "lineno": 139, "outcome": "passed", "keywords": ["test_sklearn_runtime_kserve", "asyncio", "kourier", "predictor", "pytestmark", "test_sklearn.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.045232852004119195, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 37.138438445996144, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.040659662001417, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_sklearn.py::test_sklearn_v2_runtime_mlserver", "lineno": 207, "outcome": "passed", "keywords": ["test_sklearn_v2_runtime_mlserver", "asyncio", "predictor", "pytestmark", "test_sklearn.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.03695371300273109, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 60.183130156001425, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.055964550003409, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_sklearn.py::test_sklearn_v2", "lineno": 265, "outcome": "passed", "keywords": ["test_sklearn_v2", "asyncio", "predictor", "pytestmark", "test_sklearn.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.040684901003260165, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 90.28438825800549, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.058064621000085, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_sklearn.py::test_sklearn_v2_grpc", "lineno": 331, "outcome": "skipped", "keywords": ["test_sklearn_v2_grpc", "skip", "asyncio", "predictor", "pytestmark", "test_sklearn.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.0001981859968509525, "outcome": "skipped", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python\n('/workspace/source/test/e2e/predictor/test_sklearn.py', 332, 'Skipped: GRPC tests are failing in ODH at the moment')"}, "teardown": {"duration": 0.00014275399735197425, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_sklearn.py::test_sklearn_v2_mixed", "lineno": 386, "outcome": "passed", "keywords": ["test_sklearn_v2_mixed", "asyncio", "predictor", "pytestmark", "test_sklearn.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.03437370600295253, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 90.27368576300796, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.057348219997948, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_sklearn.py::test_sklearn_v2_mixed_grpc", "lineno": 435, "outcome": "skipped", "keywords": ["test_sklearn_v2_mixed_grpc", "skip", "asyncio", "predictor", "pytestmark", "test_sklearn.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.00013223401037976146, "outcome": "skipped", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python\n('/workspace/source/test/e2e/predictor/test_sklearn.py', 436, 'Skipped: GRPC tests are failing in ODH at the moment')"}, "teardown": {"duration": 0.00010621300316415727, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_tensorflow.py::test_tensorflow_kserve", "lineno": 31, "outcome": "passed", "keywords": ["test_tensorflow_kserve", "asyncio", "predictor", "pytestmark", "test_tensorflow.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.03884443698916584, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 40.205020977999084, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.0571947660064325, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_tensorflow.py::test_tensorflow_runtime_kserve", "lineno": 76, "outcome": "passed", "keywords": ["test_tensorflow_runtime_kserve", "asyncio", "predictor", "pytestmark", "test_tensorflow.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.04079827900568489, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 40.601575499997125, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.057750337990001, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_triton.py::test_triton", "lineno": 32, "outcome": "passed", "keywords": ["test_triton", "asyncio", "path_based_routing", "predictor", "pytestmark", "test_triton.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.038004850008292124, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 131.7982467279944, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.057764548007981, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_xgboost.py::test_xgboost_kserve", "lineno": 35, "outcome": "passed", "keywords": ["test_xgboost_kserve", "asyncio", "path_based_routing", "predictor", "pytestmark", "test_xgboost.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.042105907006771304, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 90.19411973799288, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.057559955006582, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_xgboost.py::test_xgboost_v2_mlserver", "lineno": 79, "outcome": "failed", "keywords": ["test_xgboost_v2_mlserver", "asyncio", "path_based_routing", "predictor", "pytestmark", "test_xgboost.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.04529745200125035, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 0.04290655298973434, "outcome": "failed", "crash": {"path": "/workspace/source/python/kserve/kserve/api/kserve_client.py", "lineno": 153, "message": "RuntimeError: Exception when calling CustomObjectsApi->create_namespaced_custom_object:                 (500)\nReason: Internal Server Error\nHTTP response headers: HTTPHeaderDict({'Audit-Id': '78926d66-b4c3-488a-8963-363406aa7d4c', 'Cache-Control': 'no-cache, private', 'Content-Type': 'application/json', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains; preload', 'X-Kubernetes-Pf-Flowschema-Uid': 'a9293c29-ed8f-44af-b9e9-3a95d7764bbb', 'X-Kubernetes-Pf-Prioritylevel-Uid': '2b78ca0c-ff4e-43f0-8b93-8484ccc9427c', 'Date': 'Mon, 20 Jul 2026 11:08:55 GMT', 'Content-Length': '769'})\nHTTP response body: {\"kind\":\"Status\",\"apiVersion\":\"v1\",\"metadata\":{},\"status\":\"Failure\",\"message\":\"Internal error occurred: failed calling webhook \\\"inferenceservice.kserve-webhook-server.defaulter\\\": failed to call webhook: Post \\\"https://kserve-webhook-server-service.kserve.svc:443/mutate-serving-kserve-io-v1beta1-inferenceservice?timeout=10s\\\": no endpoints available for service \\\"kserve-webhook-server-service\\\"\",\"reason\":\"InternalError\",\"details\":{\"causes\":[{\"message\":\"failed calling webhook \\\"inferenceservice.kserve-webhook-server.defaulter\\\": failed to call webhook: Post \\\"https://kserve-webhook-server-service.kserve.svc:443/mutate-serving-kserve-io-v1beta1-inferenceservice?timeout=10s\\\": no endpoints available for service \\\"kserve-webhook-server-service\\\"\"}]},\"code\":500}"}, "traceback": [{"path": "predictor/test_xgboost.py", "lineno": 122, "message": ""}, {"path": "predictor/conftest.py", "lineno": 69, "message": ""}, {"path": "../../python/kserve/kserve/api/kserve_client.py", "lineno": 153, "message": "RuntimeError"}], "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python\n\nself = <kserve.api.kserve_client.KServeClient object at 0x7f7cb65d1dd0>\ninferenceservice = {'api_version': 'serving.kserve.io/v1beta1',\n 'kind': 'InferenceService',\n 'metadata': {'annotations': None,\n         ...nts': None,\n                                    'working_dir': None}},\n          'transformer': None},\n 'status': None}\nnamespace = 'kserve-ci-e2e-test', watch = False, timeout_seconds = 600\n\n    def create(\n        self, inferenceservice, namespace=None, watch=False, timeout_seconds=600\n    ):  # pylint:disable=inconsistent-return-statements\n        \"\"\"\n        Create the inference service\n        :param inferenceservice: inference service object\n        :param namespace: defaults to current or default namespace\n        :param watch: True to watch the created service until timeout elapsed or status is ready\n        :param timeout_seconds: timeout seconds for watch, default to 600s\n        :return: created inference service\n        \"\"\"\n    \n        version = inferenceservice.api_version.split(\"/\")[1]\n    \n        if namespace is None:\n            namespace = utils.get_isvc_namespace(inferenceservice)\n    \n        try:\n>           outputs = self.api_instance.create_namespaced_custom_object(\n                constants.KSERVE_GROUP,\n                version,\n                namespace,\n                constants.KSERVE_PLURAL_INFERENCESERVICE,\n                inferenceservice,\n            )\n\n../../python/kserve/kserve/api/kserve_client.py:145: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <kubernetes.client.api.custom_objects_api.CustomObjectsApi object at 0x7f7cb6616710>\ngroup = 'serving.kserve.io', version = 'v1beta1'\nnamespace = 'kserve-ci-e2e-test', plural = 'inferenceservices'\nbody = {'api_version': 'serving.kserve.io/v1beta1',\n 'kind': 'InferenceService',\n 'metadata': {'annotations': None,\n         ...nts': None,\n                                    'working_dir': None}},\n          'transformer': None},\n 'status': None}\nkwargs = {'_return_http_data_only': True}\n\n    def create_namespaced_custom_object(self, group, version, namespace, plural, body, **kwargs):  # noqa: E501\n        \"\"\"create_namespaced_custom_object  # noqa: E501\n    \n        Creates a namespace scoped Custom object  # noqa: E501\n        This method makes a synchronous HTTP request by default. To make an\n        asynchronous HTTP request, please pass async_req=True\n        >>> thread = api.create_namespaced_custom_object(group, version, namespace, plural, body, async_req=True)\n        >>> result = thread.get()\n    \n        :param async_req bool: execute request asynchronously\n        :param str group: The custom resource's group name (required)\n        :param str version: The custom resource's version (required)\n        :param str namespace: The custom resource's namespace (required)\n        :param str plural: The custom resource's plural name. For TPRs this would be lowercase plural kind. (required)\n        :param object body: The JSON schema of the Resource to create. (required)\n        :param str pretty: If 'true', then the output is pretty printed.\n        :param str dry_run: When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed\n        :param str field_manager: fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.\n        :param str field_validation: fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. (optional)\n        :param _preload_content: if False, the urllib3.HTTPResponse object will\n                                 be returned without reading/decoding response\n                                 data. Default is True.\n        :param _request_timeout: timeout setting for this request. If one\n                                 number provided, it will be total request\n                                 timeout. It can also be a pair (tuple) of\n                                 (connection, read) timeouts.\n        :return: object\n                 If the method is called asynchronously,\n                 returns the request thread.\n        \"\"\"\n        kwargs['_return_http_data_only'] = True\n>       return self.create_namespaced_custom_object_with_http_info(group, version, namespace, plural, body, **kwargs)  # noqa: E501\n\n../../python/kserve/.venv/lib64/python3.11/site-packages/kubernetes/client/api/custom_objects_api.py:231: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <kubernetes.client.api.custom_objects_api.CustomObjectsApi object at 0x7f7cb6616710>\ngroup = 'serving.kserve.io', version = 'v1beta1'\nnamespace = 'kserve-ci-e2e-test', plural = 'inferenceservices'\nbody = {'api_version': 'serving.kserve.io/v1beta1',\n 'kind': 'InferenceService',\n 'metadata': {'annotations': None,\n         ...nts': None,\n                                    'working_dir': None}},\n          'transformer': None},\n 'status': None}\nkwargs = {'_return_http_data_only': True}\nlocal_var_params = {'_return_http_data_only': True, 'all_params': ['group', 'version', 'namespace', 'plural', 'body', 'pretty', ...], 'au...None,\n                                    'working_dir': None}},\n          'transformer': None},\n 'status': None}, ...}\nall_params = ['group', 'version', 'namespace', 'plural', 'body', 'pretty', ...]\nkey = '_return_http_data_only', val = True, collection_formats = {}\npath_params = {'group': 'serving.kserve.io', 'namespace': 'kserve-ci-e2e-test', 'plural': 'inferenceservices', 'version': 'v1beta1'}\nquery_params = []\n\n    def create_namespaced_custom_object_with_http_info(self, group, version, namespace, plural, body, **kwargs):  # noqa: E501\n        \"\"\"create_namespaced_custom_object  # noqa: E501\n    \n        Creates a namespace scoped Custom object  # noqa: E501\n        This method makes a synchronous HTTP request by default. To make an\n        asynchronous HTTP request, please pass async_req=True\n        >>> thread = api.create_namespaced_custom_object_with_http_info(group, version, namespace, plural, body, async_req=True)\n        >>> result = thread.get()\n    \n        :param async_req bool: execute request asynchronously\n        :param str group: The custom resource's group name (required)\n        :param str version: The custom resource's version (required)\n        :param str namespace: The custom resource's namespace (required)\n        :param str plural: The custom resource's plural name. For TPRs this would be lowercase plural kind. (required)\n        :param object body: The JSON schema of the Resource to create. (required)\n        :param str pretty: If 'true', then the output is pretty printed.\n        :param str dry_run: When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed\n        :param str field_manager: fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.\n        :param str field_validation: fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. (optional)\n        :param _return_http_data_only: response data without head status code\n                                       and headers\n        :param _preload_content: if False, the urllib3.HTTPResponse object will\n                                 be returned without reading/decoding response\n                                 data. Default is True.\n        :param _request_timeout: timeout setting for this request. If one\n                                 number provided, it will be total request\n                                 timeout. It can also be a pair (tuple) of\n                                 (connection, read) timeouts.\n        :return: tuple(object, status_code(int), headers(HTTPHeaderDict))\n                 If the method is called asynchronously,\n                 returns the request thread.\n        \"\"\"\n    \n        local_var_params = locals()\n    \n        all_params = [\n            'group',\n            'version',\n            'namespace',\n            'plural',\n            'body',\n            'pretty',\n            'dry_run',\n            'field_manager',\n            'field_validation'\n        ]\n        all_params.extend(\n            [\n                'async_req',\n                '_return_http_data_only',\n                '_preload_content',\n                '_request_timeout'\n            ]\n        )\n    \n        for key, val in six.iteritems(local_var_params['kwargs']):\n            if key not in all_params:\n                raise ApiTypeError(\n                    \"Got an unexpected keyword argument '%s'\"\n                    \" to method create_namespaced_custom_object\" % key\n                )\n            local_var_params[key] = val\n        del local_var_params['kwargs']\n        # verify the required parameter 'group' is set\n        if self.api_client.client_side_validation and ('group' not in local_var_params or  # noqa: E501\n                                                        local_var_params['group'] is None):  # noqa: E501\n            raise ApiValueError(\"Missing the required parameter `group` when calling `create_namespaced_custom_object`\")  # noqa: E501\n        # verify the required parameter 'version' is set\n        if self.api_client.client_side_validation and ('version' not in local_var_params or  # noqa: E501\n                                                        local_var_params['version'] is None):  # noqa: E501\n            raise ApiValueError(\"Missing the required parameter `version` when calling `create_namespaced_custom_object`\")  # noqa: E501\n        # verify the required parameter 'namespace' is set\n        if self.api_client.client_side_validation and ('namespace' not in local_var_params or  # noqa: E501\n                                                        local_var_params['namespace'] is None):  # noqa: E501\n            raise ApiValueError(\"Missing the required parameter `namespace` when calling `create_namespaced_custom_object`\")  # noqa: E501\n        # verify the required parameter 'plural' is set\n        if self.api_client.client_side_validation and ('plural' not in local_var_params or  # noqa: E501\n                                                        local_var_params['plural'] is None):  # noqa: E501\n            raise ApiValueError(\"Missing the required parameter `plural` when calling `create_namespaced_custom_object`\")  # noqa: E501\n        # verify the required parameter 'body' is set\n        if self.api_client.client_side_validation and ('body' not in local_var_params or  # noqa: E501\n                                                        local_var_params['body'] is None):  # noqa: E501\n            raise ApiValueError(\"Missing the required parameter `body` when calling `create_namespaced_custom_object`\")  # noqa: E501\n    \n        collection_formats = {}\n    \n        path_params = {}\n        if 'group' in local_var_params:\n            path_params['group'] = local_var_params['group']  # noqa: E501\n        if 'version' in local_var_params:\n            path_params['version'] = local_var_params['version']  # noqa: E501\n        if 'namespace' in local_var_params:\n            path_params['namespace'] = local_var_params['namespace']  # noqa: E501\n        if 'plural' in local_var_params:\n            path_params['plural'] = local_var_params['plural']  # noqa: E501\n    \n        query_params = []\n        if 'pretty' in local_var_params and local_var_params['pretty'] is not None:  # noqa: E501\n            query_params.append(('pretty', local_var_params['pretty']))  # noqa: E501\n        if 'dry_run' in local_var_params and local_var_params['dry_run'] is not None:  # noqa: E501\n            query_params.append(('dryRun', local_var_params['dry_run']))  # noqa: E501\n        if 'field_manager' in local_var_params and local_var_params['field_manager'] is not None:  # noqa: E501\n            query_params.append(('fieldManager', local_var_params['field_manager']))  # noqa: E501\n        if 'field_validation' in local_var_params and local_var_params['field_validation'] is not None:  # noqa: E501\n            query_params.append(('fieldValidation', local_var_params['field_validation']))  # noqa: E501\n    \n        header_params = {}\n    \n        form_params = []\n        local_var_files = {}\n    \n        body_params = None\n        if 'body' in local_var_params:\n            body_params = local_var_params['body']\n        # HTTP header `Accept`\n        header_params['Accept'] = self.api_client.select_header_accept(\n            ['application/json'])  # noqa: E501\n    \n        # Authentication setting\n        auth_settings = ['BearerToken']  # noqa: E501\n    \n>       return self.api_client.call_api(\n            '/apis/{group}/{version}/namespaces/{namespace}/{plural}', 'POST',\n            path_params,\n            query_params,\n            header_params,\n            body=body_params,\n            post_params=form_params,\n            files=local_var_files,\n            response_type='object',  # noqa: E501\n            auth_settings=auth_settings,\n            async_req=local_var_params.get('async_req'),\n            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501\n            _preload_content=local_var_params.get('_preload_content', True),\n            _request_timeout=local_var_params.get('_request_timeout'),\n            collection_formats=collection_formats)\n\n../../python/kserve/.venv/lib64/python3.11/site-packages/kubernetes/client/api/custom_objects_api.py:354: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <kubernetes.client.api_client.ApiClient object at 0x7f7cb6614ad0>\nresource_path = '/apis/{group}/{version}/namespaces/{namespace}/{plural}'\nmethod = 'POST'\npath_params = {'group': 'serving.kserve.io', 'namespace': 'kserve-ci-e2e-test', 'plural': 'inferenceservices', 'version': 'v1beta1'}\nquery_params = []\nheader_params = {'Accept': 'application/json', 'User-Agent': 'OpenAPI-Generator/32.0.1/python'}\nbody = {'api_version': 'serving.kserve.io/v1beta1',\n 'kind': 'InferenceService',\n 'metadata': {'annotations': None,\n         ...nts': None,\n                                    'working_dir': None}},\n          'transformer': None},\n 'status': None}\npost_params = [], files = {}, response_type = 'object'\nauth_settings = ['BearerToken'], async_req = None, _return_http_data_only = True\ncollection_formats = {}, _preload_content = True, _request_timeout = None\n_host = None\n\n    def call_api(self, resource_path, method,\n                 path_params=None, query_params=None, header_params=None,\n                 body=None, post_params=None, files=None,\n                 response_type=None, auth_settings=None, async_req=None,\n                 _return_http_data_only=None, collection_formats=None,\n                 _preload_content=True, _request_timeout=None, _host=None):\n        \"\"\"Makes the HTTP request (synchronous) and returns deserialized data.\n    \n        To make an async_req request, set the async_req parameter.\n    \n        :param resource_path: Path to method endpoint.\n        :param method: Method to call.\n        :param path_params: Path parameters in the url.\n        :param query_params: Query parameters in the url.\n        :param header_params: Header parameters to be\n            placed in the request header.\n        :param body: Request body.\n        :param post_params dict: Request post form parameters,\n            for `application/x-www-form-urlencoded`, `multipart/form-data`.\n        :param auth_settings list: Auth Settings names for the request.\n        :param response: Response data type.\n        :param files dict: key -> filename, value -> filepath,\n            for `multipart/form-data`.\n        :param async_req bool: execute request asynchronously\n        :param _return_http_data_only: response data without head status code\n                                       and headers\n        :param collection_formats: dict of collection formats for path, query,\n            header, and post parameters.\n        :param _preload_content: if False, the urllib3.HTTPResponse object will\n                                 be returned without reading/decoding response\n                                 data. Default is True.\n        :param _request_timeout: timeout setting for this request. If one\n                                 number provided, it will be total request\n                                 timeout. It can also be a pair (tuple) of\n                                 (connection, read) timeouts.\n        :return:\n            If async_req parameter is True,\n            the request will be called asynchronously.\n            The method will return the request thread.\n            If parameter async_req is False or missing,\n            then the method will return the response directly.\n        \"\"\"\n        if not async_req:\n>           return self.__call_api(resource_path, method,\n                                   path_params, query_params, header_params,\n                                   body, post_params, files,\n                                   response_type, auth_settings,\n                                   _return_http_data_only, collection_formats,\n                                   _preload_content, _request_timeout, _host)\n\n../../python/kserve/.venv/lib64/python3.11/site-packages/kubernetes/client/api_client.py:348: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <kubernetes.client.api_client.ApiClient object at 0x7f7cb6614ad0>\nresource_path = '/apis/serving.kserve.io/v1beta1/namespaces/kserve-ci-e2e-test/inferenceservices'\nmethod = 'POST'\npath_params = [('group', 'serving.kserve.io'), ('version', 'v1beta1'), ('namespace', 'kserve-ci-e2e-test'), ('plural', 'inferenceservices')]\nquery_params = []\nheader_params = {'Accept': 'application/json', 'Content-Type': 'application/json', 'User-Agent': 'OpenAPI-Generator/32.0.1/python'}\nbody = {'apiVersion': 'serving.kserve.io/v1beta1', 'kind': 'InferenceService', 'metadata': {'labels': {'networking.kserve.io/...': {'httpGet': {'path': '/v2/models/isvc-xgboost-v2-mlserver/ready', 'port': 8080}, 'initialDelaySeconds': 30}, ...}}}}\npost_params = [], files = {}, response_type = 'object'\nauth_settings = ['BearerToken'], _return_http_data_only = True\ncollection_formats = {}, _preload_content = True, _request_timeout = None\n_host = None\n\n    def __call_api(\n            self, resource_path, method, path_params=None,\n            query_params=None, header_params=None, body=None, post_params=None,\n            files=None, response_type=None, auth_settings=None,\n            _return_http_data_only=None, collection_formats=None,\n            _preload_content=True, _request_timeout=None, _host=None):\n    \n        config = self.configuration\n    \n        # header parameters\n        header_params = header_params or {}\n        header_params.update(self.default_headers)\n        if self.cookie:\n            header_params['Cookie'] = self.cookie\n        if header_params:\n            header_params = self.sanitize_for_serialization(header_params)\n            header_params = dict(self.parameters_to_tuples(header_params,\n                                                           collection_formats))\n    \n        # path parameters\n        if path_params:\n            path_params = self.sanitize_for_serialization(path_params)\n            path_params = self.parameters_to_tuples(path_params,\n                                                    collection_formats)\n            for k, v in path_params:\n                # specified safe chars, encode everything\n                resource_path = resource_path.replace(\n                    '{%s}' % k,\n                    quote(str(v), safe=config.safe_chars_for_path_param)\n                )\n    \n        # query parameters\n        if query_params:\n            query_params = self.sanitize_for_serialization(query_params)\n            query_params = self.parameters_to_tuples(query_params,\n                                                     collection_formats)\n    \n        # post parameters\n        if post_params or files:\n            post_params = post_params if post_params else []\n            post_params = self.sanitize_for_serialization(post_params)\n            post_params = self.parameters_to_tuples(post_params,\n                                                    collection_formats)\n            post_params.extend(self.files_parameters(files))\n    \n        # auth setting\n        self.update_params_for_auth(header_params, query_params, auth_settings)\n    \n        # body\n        if body:\n            body = self.sanitize_for_serialization(body)\n    \n        # request url\n        if _host is None:\n            url = self.configuration.host + resource_path\n        else:\n            # use server/host defined in path or operation instead\n            url = _host + resource_path\n    \n        # perform request and return response\n>       response_data = self.request(\n            method, url, query_params=query_params, headers=header_params,\n            post_params=post_params, body=body,\n            _preload_content=_preload_content,\n            _request_timeout=_request_timeout)\n\n../../python/kserve/.venv/lib64/python3.11/site-packages/kubernetes/client/api_client.py:180: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <kubernetes.client.api_client.ApiClient object at 0x7f7cb6614ad0>\nmethod = 'POST'\nurl = 'https://ac85140e7a1584603a10a3dbda8d1324-e18df6e95e85ebe3.elb.us-east-1.amazonaws.com:6443/apis/serving.kserve.io/v1beta1/namespaces/kserve-ci-e2e-test/inferenceservices'\nquery_params = []\nheaders = {'Accept': 'application/json', 'Content-Type': 'application/json', 'User-Agent': 'OpenAPI-Generator/32.0.1/python'}\npost_params = []\nbody = {'apiVersion': 'serving.kserve.io/v1beta1', 'kind': 'InferenceService', 'metadata': {'labels': {'networking.kserve.io/...': {'httpGet': {'path': '/v2/models/isvc-xgboost-v2-mlserver/ready', 'port': 8080}, 'initialDelaySeconds': 30}, ...}}}}\n_preload_content = True, _request_timeout = None\n\n    def request(self, method, url, query_params=None, headers=None,\n                post_params=None, body=None, _preload_content=True,\n                _request_timeout=None):\n        \"\"\"Makes the HTTP request using RESTClient.\"\"\"\n        if method == \"GET\":\n            return self.rest_client.GET(url,\n                                        query_params=query_params,\n                                        _preload_content=_preload_content,\n                                        _request_timeout=_request_timeout,\n                                        headers=headers)\n        elif method == \"HEAD\":\n            return self.rest_client.HEAD(url,\n                                         query_params=query_params,\n                                         _preload_content=_preload_content,\n                                         _request_timeout=_request_timeout,\n                                         headers=headers)\n        elif method == \"OPTIONS\":\n            return self.rest_client.OPTIONS(url,\n                                            query_params=query_params,\n                                            headers=headers,\n                                            _preload_content=_preload_content,\n                                            _request_timeout=_request_timeout)\n        elif method == \"POST\":\n>           return self.rest_client.POST(url,\n                                         query_params=query_params,\n                                         headers=headers,\n                                         post_params=post_params,\n                                         _preload_content=_preload_content,\n                                         _request_timeout=_request_timeout,\n\n../../python/kserve/.venv/lib64/python3.11/site-packages/kubernetes/client/api_client.py:391: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <kubernetes.client.rest.RESTClientObject object at 0x7f7cb6617b10>\nurl = 'https://ac85140e7a1584603a10a3dbda8d1324-e18df6e95e85ebe3.elb.us-east-1.amazonaws.com:6443/apis/serving.kserve.io/v1beta1/namespaces/kserve-ci-e2e-test/inferenceservices'\nheaders = {'Accept': 'application/json', 'Content-Type': 'application/json', 'User-Agent': 'OpenAPI-Generator/32.0.1/python'}\nquery_params = [], post_params = []\nbody = {'apiVersion': 'serving.kserve.io/v1beta1', 'kind': 'InferenceService', 'metadata': {'labels': {'networking.kserve.io/...': {'httpGet': {'path': '/v2/models/isvc-xgboost-v2-mlserver/ready', 'port': 8080}, 'initialDelaySeconds': 30}, ...}}}}\n_preload_content = True, _request_timeout = None\n\n    def POST(self, url, headers=None, query_params=None, post_params=None,\n             body=None, _preload_content=True, _request_timeout=None):\n>       return self.request(\"POST\", url,\n                            headers=headers,\n                            query_params=query_params,\n                            post_params=post_params,\n                            _preload_content=_preload_content,\n                            _request_timeout=_request_timeout,\n                            body=body)\n\n../../python/kserve/.venv/lib64/python3.11/site-packages/kubernetes/client/rest.py:279: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <kubernetes.client.rest.RESTClientObject object at 0x7f7cb6617b10>\nmethod = 'POST'\nurl = 'https://ac85140e7a1584603a10a3dbda8d1324-e18df6e95e85ebe3.elb.us-east-1.amazonaws.com:6443/apis/serving.kserve.io/v1beta1/namespaces/kserve-ci-e2e-test/inferenceservices'\nquery_params = []\nheaders = {'Accept': 'application/json', 'Content-Type': 'application/json', 'User-Agent': 'OpenAPI-Generator/32.0.1/python'}\nbody = {'apiVersion': 'serving.kserve.io/v1beta1', 'kind': 'InferenceService', 'metadata': {'labels': {'networking.kserve.io/...': {'httpGet': {'path': '/v2/models/isvc-xgboost-v2-mlserver/ready', 'port': 8080}, 'initialDelaySeconds': 30}, ...}}}}\npost_params = {}, _preload_content = True, _request_timeout = None\n\n    def request(self, method, url, query_params=None, headers=None,\n                body=None, post_params=None, _preload_content=True,\n                _request_timeout=None):\n        \"\"\"Perform requests.\n    \n        :param method: http request method\n        :param url: http request url\n        :param query_params: query parameters in the url\n        :param headers: http request headers\n        :param body: request json body, for `application/json`\n        :param post_params: request post parameters,\n                            `application/x-www-form-urlencoded`\n                            and `multipart/form-data`\n        :param _preload_content: if False, the urllib3.HTTPResponse object will\n                                 be returned without reading/decoding response\n                                 data. Default is True.\n        :param _request_timeout: timeout setting for this request. If one\n                                 number provided, it will be total request\n                                 timeout. It can also be a pair (tuple) of\n                                 (connection, read) timeouts.\n        \"\"\"\n        method = method.upper()\n        assert method in ['GET', 'HEAD', 'DELETE', 'POST', 'PUT',\n                          'PATCH', 'OPTIONS']\n    \n        if post_params and body:\n            raise ApiValueError(\n                \"body parameter cannot be used with post_params parameter.\"\n            )\n    \n        post_params = post_params or {}\n        headers = headers or {}\n    \n        timeout = None\n        if _request_timeout:\n            if isinstance(_request_timeout, (int, ) if six.PY3 else (int, long)):  # noqa: E501,F821\n                timeout = urllib3.Timeout(total=_request_timeout)\n            elif (isinstance(_request_timeout, tuple) and\n                  len(_request_timeout) == 2):\n                timeout = urllib3.Timeout(\n                    connect=_request_timeout[0], read=_request_timeout[1])\n    \n        if 'Content-Type' not in headers:\n            headers['Content-Type'] = 'application/json'\n    \n        try:\n            # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE`\n            if method in ['POST', 'PUT', 'PATCH', 'OPTIONS', 'DELETE']:\n                if query_params:\n                    url += '?' + urlencode(query_params)\n                if (re.search('json', headers['Content-Type'], re.IGNORECASE) or\n                        headers['Content-Type'] == 'application/apply-patch+yaml'):\n                    if headers['Content-Type'] == 'application/json-patch+json':\n                        if not isinstance(body, list):\n                            headers['Content-Type'] = \\\n                                'application/strategic-merge-patch+json'\n                    request_body = None\n                    if body is not None:\n                        request_body = json.dumps(body)\n                    r = self.pool_manager.request(\n                        method, url,\n                        body=request_body,\n                        preload_content=_preload_content,\n                        timeout=timeout,\n                        headers=headers)\n                elif headers['Content-Type'] == 'application/x-www-form-urlencoded':  # noqa: E501\n                    r = self.pool_manager.request(\n                        method, url,\n                        fields=post_params,\n                        encode_multipart=False,\n                        preload_content=_preload_content,\n                        timeout=timeout,\n                        headers=headers)\n                elif headers['Content-Type'] == 'multipart/form-data':\n                    # must del headers['Content-Type'], or the correct\n                    # Content-Type which generated by urllib3 will be\n                    # overwritten.\n                    del headers['Content-Type']\n                    r = self.pool_manager.request(\n                        method, url,\n                        fields=post_params,\n                        encode_multipart=True,\n                        preload_content=_preload_content,\n                        timeout=timeout,\n                        headers=headers)\n                # Pass a `string` parameter directly in the body to support\n                # other content types than Json when `body` argument is\n                # provided in serialized form\n                elif isinstance(body, str) or isinstance(body, bytes):\n                    request_body = body\n                    r = self.pool_manager.request(\n                        method, url,\n                        body=request_body,\n                        preload_content=_preload_content,\n                        timeout=timeout,\n                        headers=headers)\n                else:\n                    # Cannot generate the request from given parameters\n                    msg = \"\"\"Cannot prepare a request message for provided\n                             arguments. Please check that your arguments match\n                             declared content type.\"\"\"\n                    raise ApiException(status=0, reason=msg)\n            # For `GET`, `HEAD`\n            else:\n                r = self.pool_manager.request(method, url,\n                                              fields=query_params,\n                                              preload_content=_preload_content,\n                                              timeout=timeout,\n                                              headers=headers)\n        except urllib3.exceptions.SSLError as e:\n            msg = \"{0}\\n{1}\".format(type(e).__name__, str(e))\n            raise ApiException(status=0, reason=msg)\n    \n        if _preload_content:\n            r = RESTResponse(r)\n    \n            # In the python 3, the response.data is bytes.\n            # we need to decode it to string.\n            if six.PY3:\n                r.data = r.data.decode('utf8')\n    \n            # log response body\n            logger.debug(\"response body: %s\", r.data)\n    \n        if not 200 <= r.status <= 299:\n>           raise ApiException(http_resp=r)\nE           kubernetes.client.exceptions.ApiException: (500)\nE           Reason: Internal Server Error\nE           HTTP response headers: HTTPHeaderDict({'Audit-Id': '78926d66-b4c3-488a-8963-363406aa7d4c', 'Cache-Control': 'no-cache, private', 'Content-Type': 'application/json', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains; preload', 'X-Kubernetes-Pf-Flowschema-Uid': 'a9293c29-ed8f-44af-b9e9-3a95d7764bbb', 'X-Kubernetes-Pf-Prioritylevel-Uid': '2b78ca0c-ff4e-43f0-8b93-8484ccc9427c', 'Date': 'Mon, 20 Jul 2026 11:08:55 GMT', 'Content-Length': '769'})\nE           HTTP response body: {\"kind\":\"Status\",\"apiVersion\":\"v1\",\"metadata\":{},\"status\":\"Failure\",\"message\":\"Internal error occurred: failed calling webhook \\\"inferenceservice.kserve-webhook-server.defaulter\\\": failed to call webhook: Post \\\"https://kserve-webhook-server-service.kserve.svc:443/mutate-serving-kserve-io-v1beta1-inferenceservice?timeout=10s\\\": no endpoints available for service \\\"kserve-webhook-server-service\\\"\",\"reason\":\"InternalError\",\"details\":{\"causes\":[{\"message\":\"failed calling webhook \\\"inferenceservice.kserve-webhook-server.defaulter\\\": failed to call webhook: Post \\\"https://kserve-webhook-server-service.kserve.svc:443/mutate-serving-kserve-io-v1beta1-inferenceservice?timeout=10s\\\": no endpoints available for service \\\"kserve-webhook-server-service\\\"\"}]},\"code\":500}\n\n../../python/kserve/.venv/lib64/python3.11/site-packages/kubernetes/client/rest.py:238: ApiException\n\nDuring handling of the above exception, another exception occurred:\n\nrest_v2_client = <kserve.inference_client.InferenceRESTClient object at 0x7f7cb718b690>\nnetwork_layer = 'openshift-route'\n\n    @pytest.mark.predictor\n    @pytest.mark.path_based_routing\n    @pytest.mark.asyncio(scope=\"session\")\n    async def test_xgboost_v2_mlserver(rest_v2_client, network_layer):\n        service_name = \"isvc-xgboost-v2-mlserver\"\n        protocol_version = \"v2\"\n    \n        predictor = V1beta1PredictorSpec(\n            min_replicas=1,\n            xgboost=V1beta1XGBoostSpec(\n                storage_uri=\"gs://kfserving-examples/models/xgboost/iris\",\n                env=[V1EnvVar(name=\"MLSERVER_MODEL_PARALLEL_WORKERS\", value=\"0\")],\n                protocol_version=protocol_version,\n                resources=V1ResourceRequirements(\n                    requests={\"cpu\": \"50m\", \"memory\": \"128Mi\"},\n                    limits={\"cpu\": \"100m\", \"memory\": \"1024Mi\"},\n                ),\n                readiness_probe=client.V1Probe(\n                    http_get=client.V1HTTPGetAction(\n                        path=f\"/v2/models/{service_name}/ready\", port=8080\n                    ),\n                    initial_delay_seconds=30,\n                ),\n            ),\n        )\n    \n        isvc = V1beta1InferenceService(\n            api_version=constants.KSERVE_V1BETA1,\n            kind=constants.KSERVE_KIND_INFERENCESERVICE,\n            metadata=client.V1ObjectMeta(\n                name=service_name,\n                namespace=KSERVE_TEST_NAMESPACE,\n                labels={\n                    constants.KSERVE_LABEL_NETWORKING_VISIBILITY: constants.KSERVE_LABEL_NETWORKING_VISIBILITY_EXPOSED,\n                },\n            ),\n            spec=V1beta1InferenceServiceSpec(predictor=predictor),\n        )\n    \n        kserve_client = KServeClient(\n            config_file=os.environ.get(\"KUBECONFIG\", \"~/.kube/config\")\n        )\n>       kserve_client.create(isvc)\n\npredictor/test_xgboost.py:122: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <kserve.api.kserve_client.KServeClient object at 0x7f7cb65d1dd0>\ninferenceservice = {'api_version': 'serving.kserve.io/v1beta1',\n 'kind': 'InferenceService',\n 'metadata': {'annotations': None,\n         ...nts': None,\n                                    'working_dir': None}},\n          'transformer': None},\n 'status': None}\nargs = (), kwargs = {}\n\n    def _tracking_create(self, inferenceservice, *args, **kwargs):\n>       result = original_create(self, inferenceservice, *args, **kwargs)\n\npredictor/conftest.py:69: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <kserve.api.kserve_client.KServeClient object at 0x7f7cb65d1dd0>\ninferenceservice = {'api_version': 'serving.kserve.io/v1beta1',\n 'kind': 'InferenceService',\n 'metadata': {'annotations': None,\n         ...nts': None,\n                                    'working_dir': None}},\n          'transformer': None},\n 'status': None}\nnamespace = 'kserve-ci-e2e-test', watch = False, timeout_seconds = 600\n\n    def create(\n        self, inferenceservice, namespace=None, watch=False, timeout_seconds=600\n    ):  # pylint:disable=inconsistent-return-statements\n        \"\"\"\n        Create the inference service\n        :param inferenceservice: inference service object\n        :param namespace: defaults to current or default namespace\n        :param watch: True to watch the created service until timeout elapsed or status is ready\n        :param timeout_seconds: timeout seconds for watch, default to 600s\n        :return: created inference service\n        \"\"\"\n    \n        version = inferenceservice.api_version.split(\"/\")[1]\n    \n        if namespace is None:\n            namespace = utils.get_isvc_namespace(inferenceservice)\n    \n        try:\n            outputs = self.api_instance.create_namespaced_custom_object(\n                constants.KSERVE_GROUP,\n                version,\n                namespace,\n                constants.KSERVE_PLURAL_INFERENCESERVICE,\n                inferenceservice,\n            )\n        except client.rest.ApiException as e:\n>           raise RuntimeError(\n                \"Exception when calling CustomObjectsApi->create_namespaced_custom_object:\\\n                 %s\\n\"\n                % e\n            )\nE           RuntimeError: Exception when calling CustomObjectsApi->create_namespaced_custom_object:                 (500)\nE           Reason: Internal Server Error\nE           HTTP response headers: HTTPHeaderDict({'Audit-Id': '78926d66-b4c3-488a-8963-363406aa7d4c', 'Cache-Control': 'no-cache, private', 'Content-Type': 'application/json', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains; preload', 'X-Kubernetes-Pf-Flowschema-Uid': 'a9293c29-ed8f-44af-b9e9-3a95d7764bbb', 'X-Kubernetes-Pf-Prioritylevel-Uid': '2b78ca0c-ff4e-43f0-8b93-8484ccc9427c', 'Date': 'Mon, 20 Jul 2026 11:08:55 GMT', 'Content-Length': '769'})\nE           HTTP response body: {\"kind\":\"Status\",\"apiVersion\":\"v1\",\"metadata\":{},\"status\":\"Failure\",\"message\":\"Internal error occurred: failed calling webhook \\\"inferenceservice.kserve-webhook-server.defaulter\\\": failed to call webhook: Post \\\"https://kserve-webhook-server-service.kserve.svc:443/mutate-serving-kserve-io-v1beta1-inferenceservice?timeout=10s\\\": no endpoints available for service \\\"kserve-webhook-server-service\\\"\",\"reason\":\"InternalError\",\"details\":{\"causes\":[{\"message\":\"failed calling webhook \\\"inferenceservice.kserve-webhook-server.defaulter\\\": failed to call webhook: Post \\\"https://kserve-webhook-server-service.kserve.svc:443/mutate-serving-kserve-io-v1beta1-inferenceservice?timeout=10s\\\": no endpoints available for service \\\"kserve-webhook-server-service\\\"\"}]},\"code\":500}\n\n../../python/kserve/kserve/api/kserve_client.py:153: RuntimeError"}, "teardown": {"duration": 5.008823857991956, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_xgboost.py::test_xgboost_single_model_file", "lineno": 135, "outcome": "failed", "keywords": ["test_xgboost_single_model_file", "asyncio", "path_based_routing", "predictor", "pytestmark", "test_xgboost.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.03874524400453083, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 0.03944805399805773, "outcome": "failed", "crash": {"path": "/workspace/source/python/kserve/kserve/api/kserve_client.py", "lineno": 153, "message": "RuntimeError: Exception when calling CustomObjectsApi->create_namespaced_custom_object:                 (500)\nReason: Internal Server Error\nHTTP response headers: HTTPHeaderDict({'Audit-Id': 'a60c92d2-f906-40a7-bc7c-f58b71f5a39a', 'Cache-Control': 'no-cache, private', 'Content-Type': 'application/json', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains; preload', 'X-Kubernetes-Pf-Flowschema-Uid': 'a9293c29-ed8f-44af-b9e9-3a95d7764bbb', 'X-Kubernetes-Pf-Prioritylevel-Uid': '2b78ca0c-ff4e-43f0-8b93-8484ccc9427c', 'Date': 'Mon, 20 Jul 2026 11:09:00 GMT', 'Content-Length': '769'})\nHTTP response body: {\"kind\":\"Status\",\"apiVersion\":\"v1\",\"metadata\":{},\"status\":\"Failure\",\"message\":\"Internal error occurred: failed calling webhook \\\"inferenceservice.kserve-webhook-server.defaulter\\\": failed to call webhook: Post \\\"https://kserve-webhook-server-service.kserve.svc:443/mutate-serving-kserve-io-v1beta1-inferenceservice?timeout=10s\\\": no endpoints available for service \\\"kserve-webhook-server-service\\\"\",\"reason\":\"InternalError\",\"details\":{\"causes\":[{\"message\":\"failed calling webhook \\\"inferenceservice.kserve-webhook-server.defaulter\\\": failed to call webhook: Post \\\"https://kserve-webhook-server-service.kserve.svc:443/mutate-serving-kserve-io-v1beta1-inferenceservice?timeout=10s\\\": no endpoints available for service \\\"kserve-webhook-server-service\\\"\"}]},\"code\":500}"}, "traceback": [{"path": "predictor/test_xgboost.py", "lineno": 178, "message": ""}, {"path": "predictor/conftest.py", "lineno": 69, "message": ""}, {"path": "../../python/kserve/kserve/api/kserve_client.py", "lineno": 153, "message": "RuntimeError"}], "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python\n\nself = <kserve.api.kserve_client.KServeClient object at 0x7f7cb72f53d0>\ninferenceservice = {'api_version': 'serving.kserve.io/v1beta1',\n 'kind': 'InferenceService',\n 'metadata': {'annotations': None,\n         ...nts': None,\n                                    'working_dir': None}},\n          'transformer': None},\n 'status': None}\nnamespace = 'kserve-ci-e2e-test', watch = False, timeout_seconds = 600\n\n    def create(\n        self, inferenceservice, namespace=None, watch=False, timeout_seconds=600\n    ):  # pylint:disable=inconsistent-return-statements\n        \"\"\"\n        Create the inference service\n        :param inferenceservice: inference service object\n        :param namespace: defaults to current or default namespace\n        :param watch: True to watch the created service until timeout elapsed or status is ready\n        :param timeout_seconds: timeout seconds for watch, default to 600s\n        :return: created inference service\n        \"\"\"\n    \n        version = inferenceservice.api_version.split(\"/\")[1]\n    \n        if namespace is None:\n            namespace = utils.get_isvc_namespace(inferenceservice)\n    \n        try:\n>           outputs = self.api_instance.create_namespaced_custom_object(\n                constants.KSERVE_GROUP,\n                version,\n                namespace,\n                constants.KSERVE_PLURAL_INFERENCESERVICE,\n                inferenceservice,\n            )\n\n../../python/kserve/kserve/api/kserve_client.py:145: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <kubernetes.client.api.custom_objects_api.CustomObjectsApi object at 0x7f7cb72f6390>\ngroup = 'serving.kserve.io', version = 'v1beta1'\nnamespace = 'kserve-ci-e2e-test', plural = 'inferenceservices'\nbody = {'api_version': 'serving.kserve.io/v1beta1',\n 'kind': 'InferenceService',\n 'metadata': {'annotations': None,\n         ...nts': None,\n                                    'working_dir': None}},\n          'transformer': None},\n 'status': None}\nkwargs = {'_return_http_data_only': True}\n\n    def create_namespaced_custom_object(self, group, version, namespace, plural, body, **kwargs):  # noqa: E501\n        \"\"\"create_namespaced_custom_object  # noqa: E501\n    \n        Creates a namespace scoped Custom object  # noqa: E501\n        This method makes a synchronous HTTP request by default. To make an\n        asynchronous HTTP request, please pass async_req=True\n        >>> thread = api.create_namespaced_custom_object(group, version, namespace, plural, body, async_req=True)\n        >>> result = thread.get()\n    \n        :param async_req bool: execute request asynchronously\n        :param str group: The custom resource's group name (required)\n        :param str version: The custom resource's version (required)\n        :param str namespace: The custom resource's namespace (required)\n        :param str plural: The custom resource's plural name. For TPRs this would be lowercase plural kind. (required)\n        :param object body: The JSON schema of the Resource to create. (required)\n        :param str pretty: If 'true', then the output is pretty printed.\n        :param str dry_run: When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed\n        :param str field_manager: fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.\n        :param str field_validation: fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. (optional)\n        :param _preload_content: if False, the urllib3.HTTPResponse object will\n                                 be returned without reading/decoding response\n                                 data. Default is True.\n        :param _request_timeout: timeout setting for this request. If one\n                                 number provided, it will be total request\n                                 timeout. It can also be a pair (tuple) of\n                                 (connection, read) timeouts.\n        :return: object\n                 If the method is called asynchronously,\n                 returns the request thread.\n        \"\"\"\n        kwargs['_return_http_data_only'] = True\n>       return self.create_namespaced_custom_object_with_http_info(group, version, namespace, plural, body, **kwargs)  # noqa: E501\n\n../../python/kserve/.venv/lib64/python3.11/site-packages/kubernetes/client/api/custom_objects_api.py:231: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <kubernetes.client.api.custom_objects_api.CustomObjectsApi object at 0x7f7cb72f6390>\ngroup = 'serving.kserve.io', version = 'v1beta1'\nnamespace = 'kserve-ci-e2e-test', plural = 'inferenceservices'\nbody = {'api_version': 'serving.kserve.io/v1beta1',\n 'kind': 'InferenceService',\n 'metadata': {'annotations': None,\n         ...nts': None,\n                                    'working_dir': None}},\n          'transformer': None},\n 'status': None}\nkwargs = {'_return_http_data_only': True}\nlocal_var_params = {'_return_http_data_only': True, 'all_params': ['group', 'version', 'namespace', 'plural', 'body', 'pretty', ...], 'au...None,\n                                    'working_dir': None}},\n          'transformer': None},\n 'status': None}, ...}\nall_params = ['group', 'version', 'namespace', 'plural', 'body', 'pretty', ...]\nkey = '_return_http_data_only', val = True, collection_formats = {}\npath_params = {'group': 'serving.kserve.io', 'namespace': 'kserve-ci-e2e-test', 'plural': 'inferenceservices', 'version': 'v1beta1'}\nquery_params = []\n\n    def create_namespaced_custom_object_with_http_info(self, group, version, namespace, plural, body, **kwargs):  # noqa: E501\n        \"\"\"create_namespaced_custom_object  # noqa: E501\n    \n        Creates a namespace scoped Custom object  # noqa: E501\n        This method makes a synchronous HTTP request by default. To make an\n        asynchronous HTTP request, please pass async_req=True\n        >>> thread = api.create_namespaced_custom_object_with_http_info(group, version, namespace, plural, body, async_req=True)\n        >>> result = thread.get()\n    \n        :param async_req bool: execute request asynchronously\n        :param str group: The custom resource's group name (required)\n        :param str version: The custom resource's version (required)\n        :param str namespace: The custom resource's namespace (required)\n        :param str plural: The custom resource's plural name. For TPRs this would be lowercase plural kind. (required)\n        :param object body: The JSON schema of the Resource to create. (required)\n        :param str pretty: If 'true', then the output is pretty printed.\n        :param str dry_run: When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed\n        :param str field_manager: fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.\n        :param str field_validation: fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. (optional)\n        :param _return_http_data_only: response data without head status code\n                                       and headers\n        :param _preload_content: if False, the urllib3.HTTPResponse object will\n                                 be returned without reading/decoding response\n                                 data. Default is True.\n        :param _request_timeout: timeout setting for this request. If one\n                                 number provided, it will be total request\n                                 timeout. It can also be a pair (tuple) of\n                                 (connection, read) timeouts.\n        :return: tuple(object, status_code(int), headers(HTTPHeaderDict))\n                 If the method is called asynchronously,\n                 returns the request thread.\n        \"\"\"\n    \n        local_var_params = locals()\n    \n        all_params = [\n            'group',\n            'version',\n            'namespace',\n            'plural',\n            'body',\n            'pretty',\n            'dry_run',\n            'field_manager',\n            'field_validation'\n        ]\n        all_params.extend(\n            [\n                'async_req',\n                '_return_http_data_only',\n                '_preload_content',\n                '_request_timeout'\n            ]\n        )\n    \n        for key, val in six.iteritems(local_var_params['kwargs']):\n            if key not in all_params:\n                raise ApiTypeError(\n                    \"Got an unexpected keyword argument '%s'\"\n                    \" to method create_namespaced_custom_object\" % key\n                )\n            local_var_params[key] = val\n        del local_var_params['kwargs']\n        # verify the required parameter 'group' is set\n        if self.api_client.client_side_validation and ('group' not in local_var_params or  # noqa: E501\n                                                        local_var_params['group'] is None):  # noqa: E501\n            raise ApiValueError(\"Missing the required parameter `group` when calling `create_namespaced_custom_object`\")  # noqa: E501\n        # verify the required parameter 'version' is set\n        if self.api_client.client_side_validation and ('version' not in local_var_params or  # noqa: E501\n                                                        local_var_params['version'] is None):  # noqa: E501\n            raise ApiValueError(\"Missing the required parameter `version` when calling `create_namespaced_custom_object`\")  # noqa: E501\n        # verify the required parameter 'namespace' is set\n        if self.api_client.client_side_validation and ('namespace' not in local_var_params or  # noqa: E501\n                                                        local_var_params['namespace'] is None):  # noqa: E501\n            raise ApiValueError(\"Missing the required parameter `namespace` when calling `create_namespaced_custom_object`\")  # noqa: E501\n        # verify the required parameter 'plural' is set\n        if self.api_client.client_side_validation and ('plural' not in local_var_params or  # noqa: E501\n                                                        local_var_params['plural'] is None):  # noqa: E501\n            raise ApiValueError(\"Missing the required parameter `plural` when calling `create_namespaced_custom_object`\")  # noqa: E501\n        # verify the required parameter 'body' is set\n        if self.api_client.client_side_validation and ('body' not in local_var_params or  # noqa: E501\n                                                        local_var_params['body'] is None):  # noqa: E501\n            raise ApiValueError(\"Missing the required parameter `body` when calling `create_namespaced_custom_object`\")  # noqa: E501\n    \n        collection_formats = {}\n    \n        path_params = {}\n        if 'group' in local_var_params:\n            path_params['group'] = local_var_params['group']  # noqa: E501\n        if 'version' in local_var_params:\n            path_params['version'] = local_var_params['version']  # noqa: E501\n        if 'namespace' in local_var_params:\n            path_params['namespace'] = local_var_params['namespace']  # noqa: E501\n        if 'plural' in local_var_params:\n            path_params['plural'] = local_var_params['plural']  # noqa: E501\n    \n        query_params = []\n        if 'pretty' in local_var_params and local_var_params['pretty'] is not None:  # noqa: E501\n            query_params.append(('pretty', local_var_params['pretty']))  # noqa: E501\n        if 'dry_run' in local_var_params and local_var_params['dry_run'] is not None:  # noqa: E501\n            query_params.append(('dryRun', local_var_params['dry_run']))  # noqa: E501\n        if 'field_manager' in local_var_params and local_var_params['field_manager'] is not None:  # noqa: E501\n            query_params.append(('fieldManager', local_var_params['field_manager']))  # noqa: E501\n        if 'field_validation' in local_var_params and local_var_params['field_validation'] is not None:  # noqa: E501\n            query_params.append(('fieldValidation', local_var_params['field_validation']))  # noqa: E501\n    \n        header_params = {}\n    \n        form_params = []\n        local_var_files = {}\n    \n        body_params = None\n        if 'body' in local_var_params:\n            body_params = local_var_params['body']\n        # HTTP header `Accept`\n        header_params['Accept'] = self.api_client.select_header_accept(\n            ['application/json'])  # noqa: E501\n    \n        # Authentication setting\n        auth_settings = ['BearerToken']  # noqa: E501\n    \n>       return self.api_client.call_api(\n            '/apis/{group}/{version}/namespaces/{namespace}/{plural}', 'POST',\n            path_params,\n            query_params,\n            header_params,\n            body=body_params,\n            post_params=form_params,\n            files=local_var_files,\n            response_type='object',  # noqa: E501\n            auth_settings=auth_settings,\n            async_req=local_var_params.get('async_req'),\n            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501\n            _preload_content=local_var_params.get('_preload_content', True),\n            _request_timeout=local_var_params.get('_request_timeout'),\n            collection_formats=collection_formats)\n\n../../python/kserve/.venv/lib64/python3.11/site-packages/kubernetes/client/api/custom_objects_api.py:354: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <kubernetes.client.api_client.ApiClient object at 0x7f7cb72f6310>\nresource_path = '/apis/{group}/{version}/namespaces/{namespace}/{plural}'\nmethod = 'POST'\npath_params = {'group': 'serving.kserve.io', 'namespace': 'kserve-ci-e2e-test', 'plural': 'inferenceservices', 'version': 'v1beta1'}\nquery_params = []\nheader_params = {'Accept': 'application/json', 'User-Agent': 'OpenAPI-Generator/32.0.1/python'}\nbody = {'api_version': 'serving.kserve.io/v1beta1',\n 'kind': 'InferenceService',\n 'metadata': {'annotations': None,\n         ...nts': None,\n                                    'working_dir': None}},\n          'transformer': None},\n 'status': None}\npost_params = [], files = {}, response_type = 'object'\nauth_settings = ['BearerToken'], async_req = None, _return_http_data_only = True\ncollection_formats = {}, _preload_content = True, _request_timeout = None\n_host = None\n\n    def call_api(self, resource_path, method,\n                 path_params=None, query_params=None, header_params=None,\n                 body=None, post_params=None, files=None,\n                 response_type=None, auth_settings=None, async_req=None,\n                 _return_http_data_only=None, collection_formats=None,\n                 _preload_content=True, _request_timeout=None, _host=None):\n        \"\"\"Makes the HTTP request (synchronous) and returns deserialized data.\n    \n        To make an async_req request, set the async_req parameter.\n    \n        :param resource_path: Path to method endpoint.\n        :param method: Method to call.\n        :param path_params: Path parameters in the url.\n        :param query_params: Query parameters in the url.\n        :param header_params: Header parameters to be\n            placed in the request header.\n        :param body: Request body.\n        :param post_params dict: Request post form parameters,\n            for `application/x-www-form-urlencoded`, `multipart/form-data`.\n        :param auth_settings list: Auth Settings names for the request.\n        :param response: Response data type.\n        :param files dict: key -> filename, value -> filepath,\n            for `multipart/form-data`.\n        :param async_req bool: execute request asynchronously\n        :param _return_http_data_only: response data without head status code\n                                       and headers\n        :param collection_formats: dict of collection formats for path, query,\n            header, and post parameters.\n        :param _preload_content: if False, the urllib3.HTTPResponse object will\n                                 be returned without reading/decoding response\n                                 data. Default is True.\n        :param _request_timeout: timeout setting for this request. If one\n                                 number provided, it will be total request\n                                 timeout. It can also be a pair (tuple) of\n                                 (connection, read) timeouts.\n        :return:\n            If async_req parameter is True,\n            the request will be called asynchronously.\n            The method will return the request thread.\n            If parameter async_req is False or missing,\n            then the method will return the response directly.\n        \"\"\"\n        if not async_req:\n>           return self.__call_api(resource_path, method,\n                                   path_params, query_params, header_params,\n                                   body, post_params, files,\n                                   response_type, auth_settings,\n                                   _return_http_data_only, collection_formats,\n                                   _preload_content, _request_timeout, _host)\n\n../../python/kserve/.venv/lib64/python3.11/site-packages/kubernetes/client/api_client.py:348: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <kubernetes.client.api_client.ApiClient object at 0x7f7cb72f6310>\nresource_path = '/apis/serving.kserve.io/v1beta1/namespaces/kserve-ci-e2e-test/inferenceservices'\nmethod = 'POST'\npath_params = [('group', 'serving.kserve.io'), ('version', 'v1beta1'), ('namespace', 'kserve-ci-e2e-test'), ('plural', 'inferenceservices')]\nquery_params = []\nheader_params = {'Accept': 'application/json', 'Content-Type': 'application/json', 'User-Agent': 'OpenAPI-Generator/32.0.1/python'}\nbody = {'apiVersion': 'serving.kserve.io/v1beta1', 'kind': 'InferenceService', 'metadata': {'labels': {'networking.kserve.io/...Probe': {'httpGet': {'path': '/v2/models/xgboost-v2-mlserver/ready', 'port': 8080}, 'initialDelaySeconds': 30}, ...}}}}\npost_params = [], files = {}, response_type = 'object'\nauth_settings = ['BearerToken'], _return_http_data_only = True\ncollection_formats = {}, _preload_content = True, _request_timeout = None\n_host = None\n\n    def __call_api(\n            self, resource_path, method, path_params=None,\n            query_params=None, header_params=None, body=None, post_params=None,\n            files=None, response_type=None, auth_settings=None,\n            _return_http_data_only=None, collection_formats=None,\n            _preload_content=True, _request_timeout=None, _host=None):\n    \n        config = self.configuration\n    \n        # header parameters\n        header_params = header_params or {}\n        header_params.update(self.default_headers)\n        if self.cookie:\n            header_params['Cookie'] = self.cookie\n        if header_params:\n            header_params = self.sanitize_for_serialization(header_params)\n            header_params = dict(self.parameters_to_tuples(header_params,\n                                                           collection_formats))\n    \n        # path parameters\n        if path_params:\n            path_params = self.sanitize_for_serialization(path_params)\n            path_params = self.parameters_to_tuples(path_params,\n                                                    collection_formats)\n            for k, v in path_params:\n                # specified safe chars, encode everything\n                resource_path = resource_path.replace(\n                    '{%s}' % k,\n                    quote(str(v), safe=config.safe_chars_for_path_param)\n                )\n    \n        # query parameters\n        if query_params:\n            query_params = self.sanitize_for_serialization(query_params)\n            query_params = self.parameters_to_tuples(query_params,\n                                                     collection_formats)\n    \n        # post parameters\n        if post_params or files:\n            post_params = post_params if post_params else []\n            post_params = self.sanitize_for_serialization(post_params)\n            post_params = self.parameters_to_tuples(post_params,\n                                                    collection_formats)\n            post_params.extend(self.files_parameters(files))\n    \n        # auth setting\n        self.update_params_for_auth(header_params, query_params, auth_settings)\n    \n        # body\n        if body:\n            body = self.sanitize_for_serialization(body)\n    \n        # request url\n        if _host is None:\n            url = self.configuration.host + resource_path\n        else:\n            # use server/host defined in path or operation instead\n            url = _host + resource_path\n    \n        # perform request and return response\n>       response_data = self.request(\n            method, url, query_params=query_params, headers=header_params,\n            post_params=post_params, body=body,\n            _preload_content=_preload_content,\n            _request_timeout=_request_timeout)\n\n../../python/kserve/.venv/lib64/python3.11/site-packages/kubernetes/client/api_client.py:180: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <kubernetes.client.api_client.ApiClient object at 0x7f7cb72f6310>\nmethod = 'POST'\nurl = 'https://ac85140e7a1584603a10a3dbda8d1324-e18df6e95e85ebe3.elb.us-east-1.amazonaws.com:6443/apis/serving.kserve.io/v1beta1/namespaces/kserve-ci-e2e-test/inferenceservices'\nquery_params = []\nheaders = {'Accept': 'application/json', 'Content-Type': 'application/json', 'User-Agent': 'OpenAPI-Generator/32.0.1/python'}\npost_params = []\nbody = {'apiVersion': 'serving.kserve.io/v1beta1', 'kind': 'InferenceService', 'metadata': {'labels': {'networking.kserve.io/...Probe': {'httpGet': {'path': '/v2/models/xgboost-v2-mlserver/ready', 'port': 8080}, 'initialDelaySeconds': 30}, ...}}}}\n_preload_content = True, _request_timeout = None\n\n    def request(self, method, url, query_params=None, headers=None,\n                post_params=None, body=None, _preload_content=True,\n                _request_timeout=None):\n        \"\"\"Makes the HTTP request using RESTClient.\"\"\"\n        if method == \"GET\":\n            return self.rest_client.GET(url,\n                                        query_params=query_params,\n                                        _preload_content=_preload_content,\n                                        _request_timeout=_request_timeout,\n                                        headers=headers)\n        elif method == \"HEAD\":\n            return self.rest_client.HEAD(url,\n                                         query_params=query_params,\n                                         _preload_content=_preload_content,\n                                         _request_timeout=_request_timeout,\n                                         headers=headers)\n        elif method == \"OPTIONS\":\n            return self.rest_client.OPTIONS(url,\n                                            query_params=query_params,\n                                            headers=headers,\n                                            _preload_content=_preload_content,\n                                            _request_timeout=_request_timeout)\n        elif method == \"POST\":\n>           return self.rest_client.POST(url,\n                                         query_params=query_params,\n                                         headers=headers,\n                                         post_params=post_params,\n                                         _preload_content=_preload_content,\n                                         _request_timeout=_request_timeout,\n\n../../python/kserve/.venv/lib64/python3.11/site-packages/kubernetes/client/api_client.py:391: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <kubernetes.client.rest.RESTClientObject object at 0x7f7cb66adb90>\nurl = 'https://ac85140e7a1584603a10a3dbda8d1324-e18df6e95e85ebe3.elb.us-east-1.amazonaws.com:6443/apis/serving.kserve.io/v1beta1/namespaces/kserve-ci-e2e-test/inferenceservices'\nheaders = {'Accept': 'application/json', 'Content-Type': 'application/json', 'User-Agent': 'OpenAPI-Generator/32.0.1/python'}\nquery_params = [], post_params = []\nbody = {'apiVersion': 'serving.kserve.io/v1beta1', 'kind': 'InferenceService', 'metadata': {'labels': {'networking.kserve.io/...Probe': {'httpGet': {'path': '/v2/models/xgboost-v2-mlserver/ready', 'port': 8080}, 'initialDelaySeconds': 30}, ...}}}}\n_preload_content = True, _request_timeout = None\n\n    def POST(self, url, headers=None, query_params=None, post_params=None,\n             body=None, _preload_content=True, _request_timeout=None):\n>       return self.request(\"POST\", url,\n                            headers=headers,\n                            query_params=query_params,\n                            post_params=post_params,\n                            _preload_content=_preload_content,\n                            _request_timeout=_request_timeout,\n                            body=body)\n\n../../python/kserve/.venv/lib64/python3.11/site-packages/kubernetes/client/rest.py:279: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <kubernetes.client.rest.RESTClientObject object at 0x7f7cb66adb90>\nmethod = 'POST'\nurl = 'https://ac85140e7a1584603a10a3dbda8d1324-e18df6e95e85ebe3.elb.us-east-1.amazonaws.com:6443/apis/serving.kserve.io/v1beta1/namespaces/kserve-ci-e2e-test/inferenceservices'\nquery_params = []\nheaders = {'Accept': 'application/json', 'Content-Type': 'application/json', 'User-Agent': 'OpenAPI-Generator/32.0.1/python'}\nbody = {'apiVersion': 'serving.kserve.io/v1beta1', 'kind': 'InferenceService', 'metadata': {'labels': {'networking.kserve.io/...Probe': {'httpGet': {'path': '/v2/models/xgboost-v2-mlserver/ready', 'port': 8080}, 'initialDelaySeconds': 30}, ...}}}}\npost_params = {}, _preload_content = True, _request_timeout = None\n\n    def request(self, method, url, query_params=None, headers=None,\n                body=None, post_params=None, _preload_content=True,\n                _request_timeout=None):\n        \"\"\"Perform requests.\n    \n        :param method: http request method\n        :param url: http request url\n        :param query_params: query parameters in the url\n        :param headers: http request headers\n        :param body: request json body, for `application/json`\n        :param post_params: request post parameters,\n                            `application/x-www-form-urlencoded`\n                            and `multipart/form-data`\n        :param _preload_content: if False, the urllib3.HTTPResponse object will\n                                 be returned without reading/decoding response\n                                 data. Default is True.\n        :param _request_timeout: timeout setting for this request. If one\n                                 number provided, it will be total request\n                                 timeout. It can also be a pair (tuple) of\n                                 (connection, read) timeouts.\n        \"\"\"\n        method = method.upper()\n        assert method in ['GET', 'HEAD', 'DELETE', 'POST', 'PUT',\n                          'PATCH', 'OPTIONS']\n    \n        if post_params and body:\n            raise ApiValueError(\n                \"body parameter cannot be used with post_params parameter.\"\n            )\n    \n        post_params = post_params or {}\n        headers = headers or {}\n    \n        timeout = None\n        if _request_timeout:\n            if isinstance(_request_timeout, (int, ) if six.PY3 else (int, long)):  # noqa: E501,F821\n                timeout = urllib3.Timeout(total=_request_timeout)\n            elif (isinstance(_request_timeout, tuple) and\n                  len(_request_timeout) == 2):\n                timeout = urllib3.Timeout(\n                    connect=_request_timeout[0], read=_request_timeout[1])\n    \n        if 'Content-Type' not in headers:\n            headers['Content-Type'] = 'application/json'\n    \n        try:\n            # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE`\n            if method in ['POST', 'PUT', 'PATCH', 'OPTIONS', 'DELETE']:\n                if query_params:\n                    url += '?' + urlencode(query_params)\n                if (re.search('json', headers['Content-Type'], re.IGNORECASE) or\n                        headers['Content-Type'] == 'application/apply-patch+yaml'):\n                    if headers['Content-Type'] == 'application/json-patch+json':\n                        if not isinstance(body, list):\n                            headers['Content-Type'] = \\\n                                'application/strategic-merge-patch+json'\n                    request_body = None\n                    if body is not None:\n                        request_body = json.dumps(body)\n                    r = self.pool_manager.request(\n                        method, url,\n                        body=request_body,\n                        preload_content=_preload_content,\n                        timeout=timeout,\n                        headers=headers)\n                elif headers['Content-Type'] == 'application/x-www-form-urlencoded':  # noqa: E501\n                    r = self.pool_manager.request(\n                        method, url,\n                        fields=post_params,\n                        encode_multipart=False,\n                        preload_content=_preload_content,\n                        timeout=timeout,\n                        headers=headers)\n                elif headers['Content-Type'] == 'multipart/form-data':\n                    # must del headers['Content-Type'], or the correct\n                    # Content-Type which generated by urllib3 will be\n                    # overwritten.\n                    del headers['Content-Type']\n                    r = self.pool_manager.request(\n                        method, url,\n                        fields=post_params,\n                        encode_multipart=True,\n                        preload_content=_preload_content,\n                        timeout=timeout,\n                        headers=headers)\n                # Pass a `string` parameter directly in the body to support\n                # other content types than Json when `body` argument is\n                # provided in serialized form\n                elif isinstance(body, str) or isinstance(body, bytes):\n                    request_body = body\n                    r = self.pool_manager.request(\n                        method, url,\n                        body=request_body,\n                        preload_content=_preload_content,\n                        timeout=timeout,\n                        headers=headers)\n                else:\n                    # Cannot generate the request from given parameters\n                    msg = \"\"\"Cannot prepare a request message for provided\n                             arguments. Please check that your arguments match\n                             declared content type.\"\"\"\n                    raise ApiException(status=0, reason=msg)\n            # For `GET`, `HEAD`\n            else:\n                r = self.pool_manager.request(method, url,\n                                              fields=query_params,\n                                              preload_content=_preload_content,\n                                              timeout=timeout,\n                                              headers=headers)\n        except urllib3.exceptions.SSLError as e:\n            msg = \"{0}\\n{1}\".format(type(e).__name__, str(e))\n            raise ApiException(status=0, reason=msg)\n    \n        if _preload_content:\n            r = RESTResponse(r)\n    \n            # In the python 3, the response.data is bytes.\n            # we need to decode it to string.\n            if six.PY3:\n                r.data = r.data.decode('utf8')\n    \n            # log response body\n            logger.debug(\"response body: %s\", r.data)\n    \n        if not 200 <= r.status <= 299:\n>           raise ApiException(http_resp=r)\nE           kubernetes.client.exceptions.ApiException: (500)\nE           Reason: Internal Server Error\nE           HTTP response headers: HTTPHeaderDict({'Audit-Id': 'a60c92d2-f906-40a7-bc7c-f58b71f5a39a', 'Cache-Control': 'no-cache, private', 'Content-Type': 'application/json', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains; preload', 'X-Kubernetes-Pf-Flowschema-Uid': 'a9293c29-ed8f-44af-b9e9-3a95d7764bbb', 'X-Kubernetes-Pf-Prioritylevel-Uid': '2b78ca0c-ff4e-43f0-8b93-8484ccc9427c', 'Date': 'Mon, 20 Jul 2026 11:09:00 GMT', 'Content-Length': '769'})\nE           HTTP response body: {\"kind\":\"Status\",\"apiVersion\":\"v1\",\"metadata\":{},\"status\":\"Failure\",\"message\":\"Internal error occurred: failed calling webhook \\\"inferenceservice.kserve-webhook-server.defaulter\\\": failed to call webhook: Post \\\"https://kserve-webhook-server-service.kserve.svc:443/mutate-serving-kserve-io-v1beta1-inferenceservice?timeout=10s\\\": no endpoints available for service \\\"kserve-webhook-server-service\\\"\",\"reason\":\"InternalError\",\"details\":{\"causes\":[{\"message\":\"failed calling webhook \\\"inferenceservice.kserve-webhook-server.defaulter\\\": failed to call webhook: Post \\\"https://kserve-webhook-server-service.kserve.svc:443/mutate-serving-kserve-io-v1beta1-inferenceservice?timeout=10s\\\": no endpoints available for service \\\"kserve-webhook-server-service\\\"\"}]},\"code\":500}\n\n../../python/kserve/.venv/lib64/python3.11/site-packages/kubernetes/client/rest.py:238: ApiException\n\nDuring handling of the above exception, another exception occurred:\n\nrest_v2_client = <kserve.inference_client.InferenceRESTClient object at 0x7f7cb718b690>\nnetwork_layer = 'openshift-route'\n\n    @pytest.mark.predictor\n    @pytest.mark.path_based_routing\n    @pytest.mark.asyncio(scope=\"session\")\n    async def test_xgboost_single_model_file(rest_v2_client, network_layer):\n        service_name = \"xgboost-v2-mlserver\"\n        protocol_version = \"v2\"\n    \n        predictor = V1beta1PredictorSpec(\n            min_replicas=1,\n            xgboost=V1beta1XGBoostSpec(\n                storage_uri=\"gs://kfserving-examples/models/xgboost/iris/model.bst\",\n                env=[V1EnvVar(name=\"MLSERVER_MODEL_PARALLEL_WORKERS\", value=\"0\")],\n                protocol_version=protocol_version,\n                resources=V1ResourceRequirements(\n                    requests={\"cpu\": \"50m\", \"memory\": \"128Mi\"},\n                    limits={\"cpu\": \"100m\", \"memory\": \"1024Mi\"},\n                ),\n                readiness_probe=client.V1Probe(\n                    http_get=client.V1HTTPGetAction(\n                        path=f\"/v2/models/{service_name}/ready\", port=8080\n                    ),\n                    initial_delay_seconds=30,\n                ),\n            ),\n        )\n    \n        isvc = V1beta1InferenceService(\n            api_version=constants.KSERVE_V1BETA1,\n            kind=constants.KSERVE_KIND_INFERENCESERVICE,\n            metadata=client.V1ObjectMeta(\n                name=service_name,\n                namespace=KSERVE_TEST_NAMESPACE,\n                labels={\n                    constants.KSERVE_LABEL_NETWORKING_VISIBILITY: constants.KSERVE_LABEL_NETWORKING_VISIBILITY_EXPOSED,\n                },\n            ),\n            spec=V1beta1InferenceServiceSpec(predictor=predictor),\n        )\n    \n        kserve_client = KServeClient(\n            config_file=os.environ.get(\"KUBECONFIG\", \"~/.kube/config\")\n        )\n>       kserve_client.create(isvc)\n\npredictor/test_xgboost.py:178: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <kserve.api.kserve_client.KServeClient object at 0x7f7cb72f53d0>\ninferenceservice = {'api_version': 'serving.kserve.io/v1beta1',\n 'kind': 'InferenceService',\n 'metadata': {'annotations': None,\n         ...nts': None,\n                                    'working_dir': None}},\n          'transformer': None},\n 'status': None}\nargs = (), kwargs = {}\n\n    def _tracking_create(self, inferenceservice, *args, **kwargs):\n>       result = original_create(self, inferenceservice, *args, **kwargs)\n\npredictor/conftest.py:69: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <kserve.api.kserve_client.KServeClient object at 0x7f7cb72f53d0>\ninferenceservice = {'api_version': 'serving.kserve.io/v1beta1',\n 'kind': 'InferenceService',\n 'metadata': {'annotations': None,\n         ...nts': None,\n                                    'working_dir': None}},\n          'transformer': None},\n 'status': None}\nnamespace = 'kserve-ci-e2e-test', watch = False, timeout_seconds = 600\n\n    def create(\n        self, inferenceservice, namespace=None, watch=False, timeout_seconds=600\n    ):  # pylint:disable=inconsistent-return-statements\n        \"\"\"\n        Create the inference service\n        :param inferenceservice: inference service object\n        :param namespace: defaults to current or default namespace\n        :param watch: True to watch the created service until timeout elapsed or status is ready\n        :param timeout_seconds: timeout seconds for watch, default to 600s\n        :return: created inference service\n        \"\"\"\n    \n        version = inferenceservice.api_version.split(\"/\")[1]\n    \n        if namespace is None:\n            namespace = utils.get_isvc_namespace(inferenceservice)\n    \n        try:\n            outputs = self.api_instance.create_namespaced_custom_object(\n                constants.KSERVE_GROUP,\n                version,\n                namespace,\n                constants.KSERVE_PLURAL_INFERENCESERVICE,\n                inferenceservice,\n            )\n        except client.rest.ApiException as e:\n>           raise RuntimeError(\n                \"Exception when calling CustomObjectsApi->create_namespaced_custom_object:\\\n                 %s\\n\"\n                % e\n            )\nE           RuntimeError: Exception when calling CustomObjectsApi->create_namespaced_custom_object:                 (500)\nE           Reason: Internal Server Error\nE           HTTP response headers: HTTPHeaderDict({'Audit-Id': 'a60c92d2-f906-40a7-bc7c-f58b71f5a39a', 'Cache-Control': 'no-cache, private', 'Content-Type': 'application/json', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains; preload', 'X-Kubernetes-Pf-Flowschema-Uid': 'a9293c29-ed8f-44af-b9e9-3a95d7764bbb', 'X-Kubernetes-Pf-Prioritylevel-Uid': '2b78ca0c-ff4e-43f0-8b93-8484ccc9427c', 'Date': 'Mon, 20 Jul 2026 11:09:00 GMT', 'Content-Length': '769'})\nE           HTTP response body: {\"kind\":\"Status\",\"apiVersion\":\"v1\",\"metadata\":{},\"status\":\"Failure\",\"message\":\"Internal error occurred: failed calling webhook \\\"inferenceservice.kserve-webhook-server.defaulter\\\": failed to call webhook: Post \\\"https://kserve-webhook-server-service.kserve.svc:443/mutate-serving-kserve-io-v1beta1-inferenceservice?timeout=10s\\\": no endpoints available for service \\\"kserve-webhook-server-service\\\"\",\"reason\":\"InternalError\",\"details\":{\"causes\":[{\"message\":\"failed calling webhook \\\"inferenceservice.kserve-webhook-server.defaulter\\\": failed to call webhook: Post \\\"https://kserve-webhook-server-service.kserve.svc:443/mutate-serving-kserve-io-v1beta1-inferenceservice?timeout=10s\\\": no endpoints available for service \\\"kserve-webhook-server-service\\\"\"}]},\"code\":500}\n\n../../python/kserve/kserve/api/kserve_client.py:153: RuntimeError"}, "teardown": {"duration": 5.010763844009489, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_xgboost.py::test_xgboost_runtime_kserve", "lineno": 191, "outcome": "passed", "keywords": ["test_xgboost_runtime_kserve", "asyncio", "path_based_routing", "predictor", "pytestmark", "test_xgboost.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.04039132100297138, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 80.24757297300675, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.051029089998337, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_xgboost.py::test_xgboost_v2_runtime_mlserver", "lineno": 238, "outcome": "passed", "keywords": ["test_xgboost_v2_runtime_mlserver", "asyncio", "path_based_routing", "predictor", "pytestmark", "test_xgboost.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.04161741699499544, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 60.164624390992685, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.053777335007908, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_xgboost.py::test_xgboost_v2", "lineno": 297, "outcome": "passed", "keywords": ["test_xgboost_v2", "asyncio", "path_based_routing", "predictor", "pytestmark", "test_xgboost.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.0404694169992581, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 80.18332645500777, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 5.055037686994183, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "predictor/test_xgboost.py::test_xgboost_v2_grpc", "lineno": 347, "outcome": "skipped", "keywords": ["test_xgboost_v2_grpc", "asyncio", "predictor", "grpc", "skip", "pytestmark", "test_xgboost.py", "predictor/__init__.py", "e2e"], "setup": {"duration": 0.00018454498786013573, "outcome": "skipped", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python\n('/workspace/source/test/e2e/predictor/test_xgboost.py', 348, 'Skipped: Not testable in ODH at the moment')"}, "teardown": {"duration": 0.00017448500148020685, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "storagespec/test_s3_storagespec.py::test_sklearn_s3_storagespec_kserve", "lineno": 31, "outcome": "passed", "keywords": ["test_sklearn_s3_storagespec_kserve", "asyncio", "path_based_routing", "predictor", "pytestmark", "test_s3_storagespec.py", "storagespec/__init__.py", "e2e"], "setup": {"duration": 0.05083432199899107, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 90.19212142800097, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 0.00016942400543484837, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "storagespec/test_s3_tls_storagespec.py::test_s3_tls_global_custom_cert_storagespec_kserve", "lineno": 201, "outcome": "passed", "keywords": ["test_s3_tls_global_custom_cert_storagespec_kserve", "kserve_on_openshift", "pytestmark", "test_s3_tls_storagespec.py", "storagespec/__init__.py", "e2e"], "setup": {"duration": 0.07634949599741958, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 92.20082388799347, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 0.00015945501218084246, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "storagespec/test_s3_tls_storagespec.py::test_s3_tls_custom_cert_storagespec_kserve", "lineno": 239, "outcome": "passed", "keywords": ["test_s3_tls_custom_cert_storagespec_kserve", "kserve_on_openshift", "pytestmark", "test_s3_tls_storagespec.py", "storagespec/__init__.py", "e2e"], "setup": {"duration": 0.04018476499186363, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 92.18348101701122, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 0.00016989500727504492, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}, {"nodeid": "storagespec/test_s3_tls_storagespec.py::test_s3_tls_serving_cert_storagespec_kserve", "lineno": 277, "outcome": "passed", "keywords": ["test_s3_tls_serving_cert_storagespec_kserve", "kserve_on_openshift", "pytestmark", "test_s3_tls_storagespec.py", "storagespec/__init__.py", "e2e"], "setup": {"duration": 0.04745965999609325, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "call": {"duration": 92.15957230899949, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}, "teardown": {"duration": 0.005549238994717598, "outcome": "passed", "longrepr": "[gw0] linux -- Python 3.11.13 /workspace/source/python/kserve/.venv/bin/python"}}]}