{
  "id": 591116,
  "title": "GatewayRuntimeError without a messaage",
  "url": "/competitions/cmi-detect-behavior-with-sensor-data/discussion/591116",
  "author_name": "",
  "post_date": "2025-07-25T13:52:41.797765300Z",
  "votes": 1,
  "comment_count": 3,
  "views": 0,
  "content": "<p>I have the following prediction code:</p>\n<pre><code>\n\n\n\n\n\n\n\n\n\n os\n gc\n joblib\n numpy  np\n pandas  pd\n polars  pl\n pathlib  Path\n traceback\n datetime  datetime\n\n\n\n\n\nARTIFACTS_DIRECTORY = Path()\n\n\n ():\n    \n    ()\n\n\nLOADED_ARTIFACTS = \n\n\n\n\nlog()\n scipy.spatial.transform  Rotation  R\n\n\n ():\n    acc_values = acc_data[[, , ]].values.astype(np.float64)\n    quat_values = rot_data[[, , , ]].values.astype(np.float64)\n    linear_accel = np.zeros_like(acc_values)\n    gravity_world = np.array([, , ])\n    :\n        valid_mask = ~(np.isnan(quat_values).(axis=) | (np.(quat_values).(axis=) &lt; ))\n         np.(valid_mask):\n            rotations = R.from_quat(quat_values[valid_mask])\n            gravity_sensor_frames = rotations.apply(gravity_world, inverse=)\n            linear_accel[valid_mask] = acc_values[valid_mask] - gravity_sensor_frames\n        linear_accel[~valid_mask] = acc_values[~valid_mask]\n     Exception:\n        linear_accel = acc_values\n     linear_accel\n\n ():\n    quat_values = rot_data[[, , , ]].values.astype(np.float64)\n    angular_vel = np.zeros((quat_values.shape[], ))\n     quat_values.shape[] &lt; :  angular_vel\n    :\n        valid_current = ~np.isnan(quat_values[:-]).(axis=)\n        valid_next = ~np.isnan(quat_values[:]).(axis=)\n        valid_pairs = valid_current &amp; valid_next\n         np.(valid_pairs):\n            rot_current = R.from_quat(quat_values[:-][valid_pairs])\n            rot_next = R.from_quat(quat_values[:][valid_pairs])\n            delta_rots = rot_current.inv() * rot_next\n            angular_vel[:-][valid_pairs] = delta_rots.as_rotvec() / time_delta\n     Exception:\n        \n     angular_vel\n\nlog()\n\n\n\n\n\n () -&gt; :\n    \n     LOADED_ARTIFACTS\n    log()\n\n    :\n        \n         LOADED_ARTIFACTS  :\n            log()\n             tensorflow  tf\n\n            \n             ():  tf.keras.backend.(x, axis=)\n             ():  tf.squeeze(x, axis=-)\n             ():  tf.expand_dims(x, axis=-)\n            custom_objects = {: time_sum, : squeeze_last_axis, : expand_last_axis}\n\n            \n            scaler = joblib.load(ARTIFACTS_DIRECTORY / )\n            label_encoder = joblib.load(ARTIFACTS_DIRECTORY / )\n            feature_cols = np.load(ARTIFACTS_DIRECTORY / , allow_pickle=)\n            pad_length = (np.load(ARTIFACTS_DIRECTORY / , allow_pickle=))\n\n            \n            models = []\n            model_files = ((ARTIFACTS_DIRECTORY.glob()))\n              model_files:\n                 FileNotFoundError()\n\n             model_path  model_files:\n                log()\n                model = tf.keras.models.load_model(model_path, custom_objects=custom_objects)\n                models.append(model)\n\n            LOADED_ARTIFACTS = {\n                : scaler,\n                : label_encoder,\n                : feature_cols,\n                : pad_length,\n                : models,\n            }\n            log()\n        :\n            log()\n\n        \n        log()\n        df = sequence.to_pandas()\n        linear_accel = remove_gravity_from_acc(df, df)\n        df[], df[], df[] = linear_accel[:, ], linear_accel[:, ], linear_accel[:, ]\n        df[] = np.sqrt(np.(linear_accel**, axis=))\n        df[] = df[].diff().fillna()\n        angular_vel = calculate_angular_velocity_from_quat(df)\n        df[], df[], df[] = angular_vel[:, ], angular_vel[:, ], angular_vel[:, ]\n\n        \n        log()\n        feature_cols = LOADED_ARTIFACTS[]\n        \n         col  feature_cols:\n             col   df.columns:\n                df[col] = \n        features = df[feature_cols].ffill().bfill().fillna().values.astype(np.float32)\n\n        \n        pad_length = LOADED_ARTIFACTS[]\n        padded = np.zeros((pad_length, features.shape[]), dtype=np.float32)\n        seq_len = ((features), pad_length)\n        padded[:seq_len] = features[:seq_len]\n\n        scaled = LOADED_ARTIFACTS[].transform(padded)\n        X_input = scaled.reshape(, pad_length, (feature_cols))\n\n        \n        log()\n        all_preds = []\n         model  LOADED_ARTIFACTS[]:\n            pred_probs = model.predict(X_input, verbose=)\n            all_preds.append(pred_probs[])\n\n        \n        avg_pred_proba = np.mean(all_preds, axis=)\n        predicted_class_int = np.argmax(avg_pred_proba)\n        prediction = LOADED_ARTIFACTS[].classes_[predicted_class_int]\n        log()\n        log()\n         prediction\n\n     Exception  e:\n        \n        log()\n        \n        \n         \n\n\n\n\n kaggle_evaluation.cmi_inference_server\n\nlog()\ninference_server = kaggle_evaluation.cmi_inference_server.CMIInferenceServer(predict)\n\n\n\n os.getenv():\n    log()\n    inference_server.serve()\n:\n    log()\n    \n    local_test_data = \n    local_test_demographics = \n     os.path.exists(local_test_data):\n         inference_server.run_local_gateway(\n             data_paths=(local_test_data, local_test_demographics)\n         )\n    :\n        log()\n\nlog()\n</code></pre>\n<p>I'm getting the following error:</p>\n<pre><code>[::] Defining  helper functions  feature engineering.\n[::] Global helper functions are defined.\n[::] Initializing Kaggle inference server...\n[::] Starting server  local test mode.\n[::] --- PREDICTION START ---\n[::] First run: Loading models  artifacts...\n[::]   -&gt; Loading model: model_fold_0.h5\n[::]   -&gt; Loading model: model_fold_1.h5\n[::]   -&gt; Loading model: model_fold_2.h5\n[::]   -&gt; Loading model: model_fold_3.h5\n[::] Artifacts   models loaded  cached.\n[::] Performing feature engineering...\n[::] Preparing data matrix  model...\n[::] Running ensemble prediction...\n[::] Prediction complete. Predicted gesture: \n[::] --- PREDICTION END ---\n\n---------------------------------------------------------------------------\nGatewayRuntimeError                       Traceback (most recent call last)\n/tmp/ipykernel_36/py  &lt;cell line: &gt;()\n         local_test_demographics = \n          os.path.exists(local_test_data):\n--&gt;           inference_server.run_local_gateway(\n                  data_paths=(local_test_data, local_test_demographics)\n              )\n\n/kaggle//cmi-detect-behavior--sensor-data/kaggle_evaluation/core/templates.py  run_local_gateway(, data_paths, file_share_dir, *args, **kwargs)\n                 .gateway.run()\n              Exception  err:\n--&gt;               err  \n             :\n                 .server.stop()\n\n/kaggle//cmi-detect-behavior--sensor-data/kaggle_evaluation/core/templates.py  run_local_gateway(, data_paths, file_share_dir, *args, **kwargs)\n             :\n                 .gateway = ._get_gateway_for_test(data_paths, file_share_dir, *args, **kwargs)\n--&gt;              .gateway.run()\n              Exception  err:\n                  err  \n\n/kaggle//cmi-detect-behavior--sensor-data/kaggle_evaluation/core/templates.py  run()\n              error:\n                 \n--&gt;               error\n     \n     \n\n/kaggle//cmi-detect-behavior--sensor-data/kaggle_evaluation/core/templates.py  run()\n              :\n                  .unpack_data_paths()\n---&gt;              predictions, row_ids = .get_all_predictions()\n                  .write_submission(predictions, row_ids)\n               kaggle_evaluation.core.base_gateway.GatewayRuntimeError  gre:\n\n/kaggle//cmi-detect-behavior--sensor-data/kaggle_evaluation/core/templates.py  get_all_predictions()\n              all_row_ids = []\n               data_batch, row_ids  .generate_data_batches():\n---&gt;              predictions = .predict(*data_batch)\n                  .validate_prediction_batch(predictions, row_ids)\n                  all_predictions.append(predictions)\n\n/kaggle//cmi-detect-behavior--sensor-data/kaggle_evaluation/core/templates.py  predict(, *args, **kwargs)\n                   .client.send(, *args, **kwargs)\n               Exception  e:\n---&gt;              .handle_server_error(e, )\n      \n           () -&gt; :\n\n/kaggle//cmi-detect-behavior--sensor-data/kaggle_evaluation/core/base_gateway.py  handle_server_error(, exception, endpoint)\n                 message_match = re.search(, exception_str, re.IGNORECASE)\n                 message = message_match.group()  message_match  exception_str\n--&gt;               GatewayRuntimeError(GatewayRuntimeErrorType.SERVER_RAISED_EXCEPTION, message)  \n              (exception, grpc._channel._InactiveRpcError):\n                  GatewayRuntimeError(GatewayRuntimeErrorType.SERVER_CONNECTION_FAILED, exception_str)  \n\nGatewayRuntimeError: (&lt;GatewayRuntimeErrorType.SERVER_RAISED_EXCEPTION: &gt;, )\n</code></pre>\n<p>Can you help me on fixing this so that I can submit?</p>",
  "messages": [
    {
      "id": "3253921",
      "postDate": "07/25/2025 13:52:41",
      "content": "<p>I have the following prediction code:</p>\n<pre><code>\n\n\n\n\n\n\n\n\n\n os\n gc\n joblib\n numpy  np\n pandas  pd\n polars  pl\n pathlib  Path\n traceback\n datetime  datetime\n\n\n\n\n\nARTIFACTS_DIRECTORY = Path()\n\n\n ():\n    \n    ()\n\n\nLOADED_ARTIFACTS = \n\n\n\n\nlog()\n scipy.spatial.transform  Rotation  R\n\n\n ():\n    acc_values = acc_data[[, , ]].values.astype(np.float64)\n    quat_values = rot_data[[, , , ]].values.astype(np.float64)\n    linear_accel = np.zeros_like(acc_values)\n    gravity_world = np.array([, , ])\n    :\n        valid_mask = ~(np.isnan(quat_values).(axis=) | (np.(quat_values).(axis=) &lt; ))\n         np.(valid_mask):\n            rotations = R.from_quat(quat_values[valid_mask])\n            gravity_sensor_frames = rotations.apply(gravity_world, inverse=)\n            linear_accel[valid_mask] = acc_values[valid_mask] - gravity_sensor_frames\n        linear_accel[~valid_mask] = acc_values[~valid_mask]\n     Exception:\n        linear_accel = acc_values\n     linear_accel\n\n ():\n    quat_values = rot_data[[, , , ]].values.astype(np.float64)\n    angular_vel = np.zeros((quat_values.shape[], ))\n     quat_values.shape[] &lt; :  angular_vel\n    :\n        valid_current = ~np.isnan(quat_values[:-]).(axis=)\n        valid_next = ~np.isnan(quat_values[:]).(axis=)\n        valid_pairs = valid_current &amp; valid_next\n         np.(valid_pairs):\n            rot_current = R.from_quat(quat_values[:-][valid_pairs])\n            rot_next = R.from_quat(quat_values[:][valid_pairs])\n            delta_rots = rot_current.inv() * rot_next\n            angular_vel[:-][valid_pairs] = delta_rots.as_rotvec() / time_delta\n     Exception:\n        \n     angular_vel\n\nlog()\n\n\n\n\n\n () -&gt; :\n    \n     LOADED_ARTIFACTS\n    log()\n\n    :\n        \n         LOADED_ARTIFACTS  :\n            log()\n             tensorflow  tf\n\n            \n             ():  tf.keras.backend.(x, axis=)\n             ():  tf.squeeze(x, axis=-)\n             ():  tf.expand_dims(x, axis=-)\n            custom_objects = {: time_sum, : squeeze_last_axis, : expand_last_axis}\n\n            \n            scaler = joblib.load(ARTIFACTS_DIRECTORY / )\n            label_encoder = joblib.load(ARTIFACTS_DIRECTORY / )\n            feature_cols = np.load(ARTIFACTS_DIRECTORY / , allow_pickle=)\n            pad_length = (np.load(ARTIFACTS_DIRECTORY / , allow_pickle=))\n\n            \n            models = []\n            model_files = ((ARTIFACTS_DIRECTORY.glob()))\n              model_files:\n                 FileNotFoundError()\n\n             model_path  model_files:\n                log()\n                model = tf.keras.models.load_model(model_path, custom_objects=custom_objects)\n                models.append(model)\n\n            LOADED_ARTIFACTS = {\n                : scaler,\n                : label_encoder,\n                : feature_cols,\n                : pad_length,\n                : models,\n            }\n            log()\n        :\n            log()\n\n        \n        log()\n        df = sequence.to_pandas()\n        linear_accel = remove_gravity_from_acc(df, df)\n        df[], df[], df[] = linear_accel[:, ], linear_accel[:, ], linear_accel[:, ]\n        df[] = np.sqrt(np.(linear_accel**, axis=))\n        df[] = df[].diff().fillna()\n        angular_vel = calculate_angular_velocity_from_quat(df)\n        df[], df[], df[] = angular_vel[:, ], angular_vel[:, ], angular_vel[:, ]\n\n        \n        log()\n        feature_cols = LOADED_ARTIFACTS[]\n        \n         col  feature_cols:\n             col   df.columns:\n                df[col] = \n        features = df[feature_cols].ffill().bfill().fillna().values.astype(np.float32)\n\n        \n        pad_length = LOADED_ARTIFACTS[]\n        padded = np.zeros((pad_length, features.shape[]), dtype=np.float32)\n        seq_len = ((features), pad_length)\n        padded[:seq_len] = features[:seq_len]\n\n        scaled = LOADED_ARTIFACTS[].transform(padded)\n        X_input = scaled.reshape(, pad_length, (feature_cols))\n\n        \n        log()\n        all_preds = []\n         model  LOADED_ARTIFACTS[]:\n            pred_probs = model.predict(X_input, verbose=)\n            all_preds.append(pred_probs[])\n\n        \n        avg_pred_proba = np.mean(all_preds, axis=)\n        predicted_class_int = np.argmax(avg_pred_proba)\n        prediction = LOADED_ARTIFACTS[].classes_[predicted_class_int]\n        log()\n        log()\n         prediction\n\n     Exception  e:\n        \n        log()\n        \n        \n         \n\n\n\n\n kaggle_evaluation.cmi_inference_server\n\nlog()\ninference_server = kaggle_evaluation.cmi_inference_server.CMIInferenceServer(predict)\n\n\n\n os.getenv():\n    log()\n    inference_server.serve()\n:\n    log()\n    \n    local_test_data = \n    local_test_demographics = \n     os.path.exists(local_test_data):\n         inference_server.run_local_gateway(\n             data_paths=(local_test_data, local_test_demographics)\n         )\n    :\n        log()\n\nlog()\n</code></pre>\n<p>I'm getting the following error:</p>\n<pre><code>[::] Defining  helper functions  feature engineering.\n[::] Global helper functions are defined.\n[::] Initializing Kaggle inference server...\n[::] Starting server  local test mode.\n[::] --- PREDICTION START ---\n[::] First run: Loading models  artifacts...\n[::]   -&gt; Loading model: model_fold_0.h5\n[::]   -&gt; Loading model: model_fold_1.h5\n[::]   -&gt; Loading model: model_fold_2.h5\n[::]   -&gt; Loading model: model_fold_3.h5\n[::] Artifacts   models loaded  cached.\n[::] Performing feature engineering...\n[::] Preparing data matrix  model...\n[::] Running ensemble prediction...\n[::] Prediction complete. Predicted gesture: \n[::] --- PREDICTION END ---\n\n---------------------------------------------------------------------------\nGatewayRuntimeError                       Traceback (most recent call last)\n/tmp/ipykernel_36/py  &lt;cell line: &gt;()\n         local_test_demographics = \n          os.path.exists(local_test_data):\n--&gt;           inference_server.run_local_gateway(\n                  data_paths=(local_test_data, local_test_demographics)\n              )\n\n/kaggle//cmi-detect-behavior--sensor-data/kaggle_evaluation/core/templates.py  run_local_gateway(, data_paths, file_share_dir, *args, **kwargs)\n                 .gateway.run()\n              Exception  err:\n--&gt;               err  \n             :\n                 .server.stop()\n\n/kaggle//cmi-detect-behavior--sensor-data/kaggle_evaluation/core/templates.py  run_local_gateway(, data_paths, file_share_dir, *args, **kwargs)\n             :\n                 .gateway = ._get_gateway_for_test(data_paths, file_share_dir, *args, **kwargs)\n--&gt;              .gateway.run()\n              Exception  err:\n                  err  \n\n/kaggle//cmi-detect-behavior--sensor-data/kaggle_evaluation/core/templates.py  run()\n              error:\n                 \n--&gt;               error\n     \n     \n\n/kaggle//cmi-detect-behavior--sensor-data/kaggle_evaluation/core/templates.py  run()\n              :\n                  .unpack_data_paths()\n---&gt;              predictions, row_ids = .get_all_predictions()\n                  .write_submission(predictions, row_ids)\n               kaggle_evaluation.core.base_gateway.GatewayRuntimeError  gre:\n\n/kaggle//cmi-detect-behavior--sensor-data/kaggle_evaluation/core/templates.py  get_all_predictions()\n              all_row_ids = []\n               data_batch, row_ids  .generate_data_batches():\n---&gt;              predictions = .predict(*data_batch)\n                  .validate_prediction_batch(predictions, row_ids)\n                  all_predictions.append(predictions)\n\n/kaggle//cmi-detect-behavior--sensor-data/kaggle_evaluation/core/templates.py  predict(, *args, **kwargs)\n                   .client.send(, *args, **kwargs)\n               Exception  e:\n---&gt;              .handle_server_error(e, )\n      \n           () -&gt; :\n\n/kaggle//cmi-detect-behavior--sensor-data/kaggle_evaluation/core/base_gateway.py  handle_server_error(, exception, endpoint)\n                 message_match = re.search(, exception_str, re.IGNORECASE)\n                 message = message_match.group()  message_match  exception_str\n--&gt;               GatewayRuntimeError(GatewayRuntimeErrorType.SERVER_RAISED_EXCEPTION, message)  \n              (exception, grpc._channel._InactiveRpcError):\n                  GatewayRuntimeError(GatewayRuntimeErrorType.SERVER_CONNECTION_FAILED, exception_str)  \n\nGatewayRuntimeError: (&lt;GatewayRuntimeErrorType.SERVER_RAISED_EXCEPTION: &gt;, )\n</code></pre>\n<p>Can you help me on fixing this so that I can submit?</p>",
      "rawMarkdown": "I have the following prediction code:\n\n```py\n# =================================================================================\n#\n#  Gesture Recognition - Kaggle Submission Script\n#\n#  This script is designed for inference. It loads pre-trained models and\n#  all necessary artifacts to predict gestures from sensor data sequences.\n#  It is optimized for the Kaggle environment, loading artifacts only once.\n#\n# =================================================================================\n\nimport os\nimport gc\nimport joblib\nimport numpy as np\nimport pandas as pd\nimport polars as pl\nfrom pathlib import Path\nimport traceback\nfrom datetime import datetime\n\n# --- Configuration ---\n# !!! IMPORTANT !!!\n# Change this path to point to the Kaggle dataset containing your trained models and artifacts.\n# For example: \"/kaggle/input/my-gesture-model-artifacts/\"\nARTIFACTS_DIRECTORY = Path(\"/kaggle/input/dosamasters-sub1/output/\")\n\n# --- Global Logging & Artifact Cache ---\ndef log(message: str):\n    \"\"\"A simple, timestamped print function for clear logging during inference.\"\"\"\n    print(f\"[{datetime.now().strftime('%H:%M:%S')}] {message}\")\n\n# This global variable will cache the loaded artifacts to prevent reloading on every call.\nLOADED_ARTIFACTS = None\n\n# =================================================================================\n# STEP 1: All necessary helper functions from training are defined globally.\n# =================================================================================\nlog(\"Defining global helper functions for feature engineering.\")\nfrom scipy.spatial.transform import Rotation as R\n\n# The following functions are identical to the ones used during training to ensure consistency.\ndef remove_gravity_from_acc(acc_data, rot_data):\n    acc_values = acc_data[['acc_x', 'acc_y', 'acc_z']].values.astype(np.float64)\n    quat_values = rot_data[['rot_x', 'rot_y', 'rot_z', 'rot_w']].values.astype(np.float64)\n    linear_accel = np.zeros_like(acc_values)\n    gravity_world = np.array([0, 0, 9.81])\n    try:\n        valid_mask = ~(np.isnan(quat_values).any(axis=1) | (np.abs(quat_values).sum(axis=1) < 1e-8))\n        if np.any(valid_mask):\n            rotations = R.from_quat(quat_values[valid_mask])\n            gravity_sensor_frames = rotations.apply(gravity_world, inverse=True)\n            linear_accel[valid_mask] = acc_values[valid_mask] - gravity_sensor_frames\n        linear_accel[~valid_mask] = acc_values[~valid_mask]\n    except Exception:\n        linear_accel = acc_values\n    return linear_accel\n\ndef calculate_angular_velocity_from_quat(rot_data, time_delta=1/200):\n    quat_values = rot_data[['rot_x', 'rot_y', 'rot_z', 'rot_w']].values.astype(np.float64)\n    angular_vel = np.zeros((quat_values.shape[0], 3))\n    if quat_values.shape[0] < 2: return angular_vel\n    try:\n        valid_current = ~np.isnan(quat_values[:-1]).any(axis=1)\n        valid_next = ~np.isnan(quat_values[1:]).any(axis=1)\n        valid_pairs = valid_current & valid_next\n        if np.any(valid_pairs):\n            rot_current = R.from_quat(quat_values[:-1][valid_pairs])\n            rot_next = R.from_quat(quat_values[1:][valid_pairs])\n            delta_rots = rot_current.inv() * rot_next\n            angular_vel[:-1][valid_pairs] = delta_rots.as_rotvec() / time_delta\n    except Exception:\n        pass\n    return angular_vel\n\nlog(\"Global helper functions are defined.\")\n\n\n# =================================================================================\n# STEP 2: The Official `predict` Function for the Kaggle API\n# =================================================================================\ndef predict(sequence: pl.DataFrame, demographics: pl.DataFrame) -> str:\n    \"\"\"\n    This function is called by the Kaggle server for each test sequence.\n    \"\"\"\n    global LOADED_ARTIFACTS\n    log(\"--- PREDICTION START ---\")\n\n    try:\n        # --- Stage A: Load Models and Artifacts (ONCE) ---\n        if LOADED_ARTIFACTS is None:\n            log(\"First run: Loading models and artifacts...\")\n            import tensorflow as tf\n\n            # Define custom objects needed to load the model\n            def time_sum(x): return tf.keras.backend.sum(x, axis=1)\n            def squeeze_last_axis(x): return tf.squeeze(x, axis=-1)\n            def expand_last_axis(x): return tf.expand_dims(x, axis=-1)\n            custom_objects = {'time_sum': time_sum, 'squeeze_last_axis': squeeze_last_axis, 'expand_last_axis': expand_last_axis}\n\n            # Load preprocessing tools and metadata\n            scaler = joblib.load(ARTIFACTS_DIRECTORY / \"scaler.pkl\")\n            label_encoder = joblib.load(ARTIFACTS_DIRECTORY / \"label_encoder.pkl\")\n            feature_cols = np.load(ARTIFACTS_DIRECTORY / \"feature_cols.npy\", allow_pickle=True)\n            pad_length = int(np.load(ARTIFACTS_DIRECTORY / \"sequence_maxlen.npy\", allow_pickle=True))\n\n            # Load all trained model folds\n            models = []\n            model_files = sorted(list(ARTIFACTS_DIRECTORY.glob(\"model_fold_*.h5\")))\n            if not model_files:\n                raise FileNotFoundError(f\"No model files (.h5) found in {ARTIFACTS_DIRECTORY}\")\n\n            for model_path in model_files:\n                log(f\"  -> Loading model: {model_path.name}\")\n                model = tf.keras.models.load_model(model_path, custom_objects=custom_objects)\n                models.append(model)\n\n            LOADED_ARTIFACTS = {\n                'scaler': scaler,\n                'label_encoder': label_encoder,\n                'feature_cols': feature_cols,\n                'pad_length': pad_length,\n                'models': models,\n            }\n            log(f\"Artifacts and {len(models)} models loaded and cached.\")\n        else:\n            log(\"Artifacts already in memory.\")\n\n        # --- Stage B: Feature Engineering ---\n        log(\"Performing feature engineering...\")\n        df = sequence.to_pandas()\n        linear_accel = remove_gravity_from_acc(df, df)\n        df[\"linear_acc_x\"], df[\"linear_acc_y\"], df[\"linear_acc_z\"] = linear_accel[:, 0], linear_accel[:, 1], linear_accel[:, 2]\n        df[\"linear_acc_mag\"] = np.sqrt(np.sum(linear_accel**2, axis=1))\n        df[\"linear_acc_mag_jerk\"] = df[\"linear_acc_mag\"].diff().fillna(0)\n        angular_vel = calculate_angular_velocity_from_quat(df)\n        df[\"angular_vel_x\"], df[\"angular_vel_y\"], df[\"angular_vel_z\"] = angular_vel[:, 0], angular_vel[:, 1], angular_vel[:, 2]\n\n        # --- Stage C: Data Preparation ---\n        log(\"Preparing data matrix for model...\")\n        feature_cols = LOADED_ARTIFACTS['feature_cols']\n        # Ensure all columns from training are present, filling missing ones with 0\n        for col in feature_cols:\n            if col not in df.columns:\n                df[col] = 0\n        features = df[feature_cols].ffill().bfill().fillna(0).values.astype(np.float32)\n\n        # Pad and scale the sequence exactly as in training\n        pad_length = LOADED_ARTIFACTS['pad_length']\n        padded = np.zeros((pad_length, features.shape[1]), dtype=np.float32)\n        seq_len = min(len(features), pad_length)\n        padded[:seq_len] = features[:seq_len]\n\n        scaled = LOADED_ARTIFACTS['scaler'].transform(padded)\n        X_input = scaled.reshape(1, pad_length, len(feature_cols))\n\n        # --- Stage D: Ensemble Prediction ---\n        log(\"Running ensemble prediction...\")\n        all_preds = []\n        for model in LOADED_ARTIFACTS['models']:\n            pred_probs = model.predict(X_input, verbose=0)\n            all_preds.append(pred_probs[0])\n\n        # Average the predictions from all models\n        avg_pred_proba = np.mean(all_preds, axis=0)\n        predicted_class_int = np.argmax(avg_pred_proba)\n        prediction = LOADED_ARTIFACTS['label_encoder'].classes_[predicted_class_int]\n        log(f\"Prediction complete. Predicted gesture: '{prediction}'\")\n        log(\"--- PREDICTION END ---\\n\")\n        return prediction\n\n    except Exception as e:\n        # If any error occurs, log it and return a default value as required by the competition.\n        log(f\"FATAL ERROR in predict function: {e}\\n{traceback.format_exc()}\")\n        # Returning a default valid gesture is often better than failing.\n        # You can change 'unknown' to the most frequent class if needed.\n        return 'unknown'\n\n# =================================================================================\n# STEP 3: Kaggle Server Initialization\n# =================================================================================\nimport kaggle_evaluation.cmi_inference_server\n\nlog(\"Initializing Kaggle inference server...\")\ninference_server = kaggle_evaluation.cmi_inference_server.CMIInferenceServer(predict)\n\n# The server is started only when the KAGGLE_IS_COMPETITION_RERUN environment variable is set.\n# For local testing, it runs a local gateway.\nif os.getenv('KAGGLE_IS_COMPETITION_RERUN'):\n    log(\"Starting server in competition mode.\")\n    inference_server.serve()\nelse:\n    log(\"Starting server in local test mode.\")\n    # In local mode, you need to provide paths to local test data.\n    local_test_data = '/kaggle/input/cmi-detect-behavior-with-sensor-data/test.csv'\n    local_test_demographics = '/kaggle/input/cmi-detect-behavior-with-sensor-data/test_demographics.csv'\n    if os.path.exists(local_test_data):\n         inference_server.run_local_gateway(\n             data_paths=(local_test_data, local_test_demographics)\n         )\n    else:\n        log(\"Local test files not found. Submission script finished without local test.\")\n\nlog(\"Submission script execution finished.\")\n```\n\n\nI'm getting the following error:\n\n```\n[13:49:22] Defining global helper functions for feature engineering.\n[13:49:22] Global helper functions are defined.\n[13:49:22] Initializing Kaggle inference server...\n[13:49:22] Starting server in local test mode.\n[13:49:22] --- PREDICTION START ---\n[13:49:22] First run: Loading models and artifacts...\n[13:49:22]   -> Loading model: model_fold_0.h5\n[13:49:23]   -> Loading model: model_fold_1.h5\n[13:49:24]   -> Loading model: model_fold_2.h5\n[13:49:24]   -> Loading model: model_fold_3.h5\n[13:49:25] Artifacts and 4 models loaded and cached.\n[13:49:25] Performing feature engineering...\n[13:49:25] Preparing data matrix for model...\n[13:49:25] Running ensemble prediction...\n[13:49:31] Prediction complete. Predicted gesture: 'Forehead - scratch'\n[13:49:31] --- PREDICTION END ---\n\n---------------------------------------------------------------------------\nGatewayRuntimeError                       Traceback (most recent call last)\n/tmp/ipykernel_36/1179446127.py in <cell line: 0>()\n    195     local_test_demographics = '/kaggle/input/cmi-detect-behavior-with-sensor-data/test_demographics.csv'\n    196     if os.path.exists(local_test_data):\n--> 197          inference_server.run_local_gateway(\n    198              data_paths=(local_test_data, local_test_demographics)\n    199          )\n\n/kaggle/input/cmi-detect-behavior-with-sensor-data/kaggle_evaluation/core/templates.py in run_local_gateway(self, data_paths, file_share_dir, *args, **kwargs)\n    147             self.gateway.run()\n    148         except Exception as err:\n--> 149             raise err from None\n    150         finally:\n    151             self.server.stop(0)\n\n/kaggle/input/cmi-detect-behavior-with-sensor-data/kaggle_evaluation/core/templates.py in run_local_gateway(self, data_paths, file_share_dir, *args, **kwargs)\n    145         try:\n    146             self.gateway = self._get_gateway_for_test(data_paths, file_share_dir, *args, **kwargs)\n--> 147             self.gateway.run()\n    148         except Exception as err:\n    149             raise err from None\n\n/kaggle/input/cmi-detect-behavior-with-sensor-data/kaggle_evaluation/core/templates.py in run(self)\n    103         elif error:\n    104             # For local testing\n--> 105             raise error\n    106 \n    107 \n\n/kaggle/input/cmi-detect-behavior-with-sensor-data/kaggle_evaluation/core/templates.py in run(self)\n     82         try:\n     83             self.unpack_data_paths()\n---> 84             predictions, row_ids = self.get_all_predictions()\n     85             self.write_submission(predictions, row_ids)\n     86         except kaggle_evaluation.core.base_gateway.GatewayRuntimeError as gre:\n\n/kaggle/input/cmi-detect-behavior-with-sensor-data/kaggle_evaluation/core/templates.py in get_all_predictions(self)\n     54         all_row_ids = []\n     55         for data_batch, row_ids in self.generate_data_batches():\n---> 56             predictions = self.predict(*data_batch)\n     57             self.validate_prediction_batch(predictions, row_ids)\n     58             all_predictions.append(predictions)\n\n/kaggle/input/cmi-detect-behavior-with-sensor-data/kaggle_evaluation/core/templates.py in predict(self, *args, **kwargs)\n     70             return self.client.send('predict', *args, **kwargs)\n     71         except Exception as e:\n---> 72             self.handle_server_error(e, 'predict')\n     73 \n     74     def set_response_timeout_seconds(self, timeout_seconds: int) -> None:\n\n/kaggle/input/cmi-detect-behavior-with-sensor-data/kaggle_evaluation/core/base_gateway.py in handle_server_error(self, exception, endpoint)\n    255             message_match = re.search('\"Exception calling application: (.*)\"', exception_str, re.IGNORECASE)\n    256             message = message_match.group(1) if message_match else exception_str\n--> 257             raise GatewayRuntimeError(GatewayRuntimeErrorType.SERVER_RAISED_EXCEPTION, message) from None\n    258         if isinstance(exception, grpc._channel._InactiveRpcError):\n    259             raise GatewayRuntimeError(GatewayRuntimeErrorType.SERVER_CONNECTION_FAILED, exception_str) from None\n\nGatewayRuntimeError: (<GatewayRuntimeErrorType.SERVER_RAISED_EXCEPTION: 3>, '')\n```\n\nCan you help me on fixing this so that I can submit?",
      "votes": null
    },
    {
      "id": "3255391",
      "postDate": "07/28/2025 15:17:57",
      "content": "<p>Modify <code>kaggle_evaluation</code> folder of this competition and create a new dataset or model using it. Then you can edit the code and import this folder as module and replace <code>kaggle_evaluation.cmi_inference_server</code> for debug.</p>",
      "rawMarkdown": "Modify `kaggle_evaluation` folder of this competition and create a new dataset or model using it. Then you can edit the code and import this folder as module and replace `kaggle_evaluation.cmi_inference_server` for debug.",
      "votes": null
    },
    {
      "id": "3267625",
      "postDate": "08/11/2025 15:11:43",
      "content": "<p><a href=\"https://www.kaggle.com/rithulkamesh\" target=\"_blank\">@rithulkamesh</a> hey were you able to resolve this issue?</p>",
      "rawMarkdown": "rithulkamesh hey were you able to resolve this issue?",
      "votes": null
    },
    {
      "id": "3271758",
      "postDate": "08/19/2025 15:37:47",
      "content": "<p>I had the same issue; check the result type of your model; if it's numpy.str_ you should convert it to str.<br>\nFor me it worked. </p>",
      "rawMarkdown": "I had the same issue; check the result type of your model; if it's numpy.str_ you should convert it to str.\nFor me it worked.",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 3255391,
      "author_name": "wasupandceacar",
      "author_url": "",
      "post_date": "07/28/2025 15:17:57",
      "content": "<p>Modify <code>kaggle_evaluation</code> folder of this competition and create a new dataset or model using it. Then you can edit the code and import this folder as module and replace <code>kaggle_evaluation.cmi_inference_server</code> for debug.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 3267625,
      "author_name": "arpit1bansal",
      "author_url": "",
      "post_date": "08/11/2025 15:11:43",
      "content": "<p><a href=\"https://www.kaggle.com/rithulkamesh\" target=\"_blank\">@rithulkamesh</a> hey were you able to resolve this issue?</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 3271758,
      "author_name": "obiaf88",
      "author_url": "",
      "post_date": "08/19/2025 15:37:47",
      "content": "<p>I had the same issue; check the result type of your model; if it's numpy.str_ you should convert it to str.<br>\nFor me it worked. </p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "3253921": "I have the following prediction code:\n\n```py\n# =================================================================================\n#\n#  Gesture Recognition - Kaggle Submission Script\n#\n#  This script is designed for inference. It loads pre-trained models and\n#  all necessary artifacts to predict gestures from sensor data sequences.\n#  It is optimized for the Kaggle environment, loading artifacts only once.\n#\n# =================================================================================\n\nimport os\nimport gc\nimport joblib\nimport numpy as np\nimport pandas as pd\nimport polars as pl\nfrom pathlib import Path\nimport traceback\nfrom datetime import datetime\n\n# --- Configuration ---\n# !!! IMPORTANT !!!\n# Change this path to point to the Kaggle dataset containing your trained models and artifacts.\n# For example: \"/kaggle/input/my-gesture-model-artifacts/\"\nARTIFACTS_DIRECTORY = Path(\"/kaggle/input/dosamasters-sub1/output/\")\n\n# --- Global Logging & Artifact Cache ---\ndef log(message: str):\n    \"\"\"A simple, timestamped print function for clear logging during inference.\"\"\"\n    print(f\"[{datetime.now().strftime('%H:%M:%S')}] {message}\")\n\n# This global variable will cache the loaded artifacts to prevent reloading on every call.\nLOADED_ARTIFACTS = None\n\n# =================================================================================\n# STEP 1: All necessary helper functions from training are defined globally.\n# =================================================================================\nlog(\"Defining global helper functions for feature engineering.\")\nfrom scipy.spatial.transform import Rotation as R\n\n# The following functions are identical to the ones used during training to ensure consistency.\ndef remove_gravity_from_acc(acc_data, rot_data):\n    acc_values = acc_data[['acc_x', 'acc_y', 'acc_z']].values.astype(np.float64)\n    quat_values = rot_data[['rot_x', 'rot_y', 'rot_z', 'rot_w']].values.astype(np.float64)\n    linear_accel = np.zeros_like(acc_values)\n    gravity_world = np.array([0, 0, 9.81])\n    try:\n        valid_mask = ~(np.isnan(quat_values).any(axis=1) | (np.abs(quat_values).sum(axis=1) < 1e-8))\n        if np.any(valid_mask):\n            rotations = R.from_quat(quat_values[valid_mask])\n            gravity_sensor_frames = rotations.apply(gravity_world, inverse=True)\n            linear_accel[valid_mask] = acc_values[valid_mask] - gravity_sensor_frames\n        linear_accel[~valid_mask] = acc_values[~valid_mask]\n    except Exception:\n        linear_accel = acc_values\n    return linear_accel\n\ndef calculate_angular_velocity_from_quat(rot_data, time_delta=1/200):\n    quat_values = rot_data[['rot_x', 'rot_y', 'rot_z', 'rot_w']].values.astype(np.float64)\n    angular_vel = np.zeros((quat_values.shape[0], 3))\n    if quat_values.shape[0] < 2: return angular_vel\n    try:\n        valid_current = ~np.isnan(quat_values[:-1]).any(axis=1)\n        valid_next = ~np.isnan(quat_values[1:]).any(axis=1)\n        valid_pairs = valid_current & valid_next\n        if np.any(valid_pairs):\n            rot_current = R.from_quat(quat_values[:-1][valid_pairs])\n            rot_next = R.from_quat(quat_values[1:][valid_pairs])\n            delta_rots = rot_current.inv() * rot_next\n            angular_vel[:-1][valid_pairs] = delta_rots.as_rotvec() / time_delta\n    except Exception:\n        pass\n    return angular_vel\n\nlog(\"Global helper functions are defined.\")\n\n\n# =================================================================================\n# STEP 2: The Official `predict` Function for the Kaggle API\n# =================================================================================\ndef predict(sequence: pl.DataFrame, demographics: pl.DataFrame) -> str:\n    \"\"\"\n    This function is called by the Kaggle server for each test sequence.\n    \"\"\"\n    global LOADED_ARTIFACTS\n    log(\"--- PREDICTION START ---\")\n\n    try:\n        # --- Stage A: Load Models and Artifacts (ONCE) ---\n        if LOADED_ARTIFACTS is None:\n            log(\"First run: Loading models and artifacts...\")\n            import tensorflow as tf\n\n            # Define custom objects needed to load the model\n            def time_sum(x): return tf.keras.backend.sum(x, axis=1)\n            def squeeze_last_axis(x): return tf.squeeze(x, axis=-1)\n            def expand_last_axis(x): return tf.expand_dims(x, axis=-1)\n            custom_objects = {'time_sum': time_sum, 'squeeze_last_axis': squeeze_last_axis, 'expand_last_axis': expand_last_axis}\n\n            # Load preprocessing tools and metadata\n            scaler = joblib.load(ARTIFACTS_DIRECTORY / \"scaler.pkl\")\n            label_encoder = joblib.load(ARTIFACTS_DIRECTORY / \"label_encoder.pkl\")\n            feature_cols = np.load(ARTIFACTS_DIRECTORY / \"feature_cols.npy\", allow_pickle=True)\n            pad_length = int(np.load(ARTIFACTS_DIRECTORY / \"sequence_maxlen.npy\", allow_pickle=True))\n\n            # Load all trained model folds\n            models = []\n            model_files = sorted(list(ARTIFACTS_DIRECTORY.glob(\"model_fold_*.h5\")))\n            if not model_files:\n                raise FileNotFoundError(f\"No model files (.h5) found in {ARTIFACTS_DIRECTORY}\")\n\n            for model_path in model_files:\n                log(f\"  -> Loading model: {model_path.name}\")\n                model = tf.keras.models.load_model(model_path, custom_objects=custom_objects)\n                models.append(model)\n\n            LOADED_ARTIFACTS = {\n                'scaler': scaler,\n                'label_encoder': label_encoder,\n                'feature_cols': feature_cols,\n                'pad_length': pad_length,\n                'models': models,\n            }\n            log(f\"Artifacts and {len(models)} models loaded and cached.\")\n        else:\n            log(\"Artifacts already in memory.\")\n\n        # --- Stage B: Feature Engineering ---\n        log(\"Performing feature engineering...\")\n        df = sequence.to_pandas()\n        linear_accel = remove_gravity_from_acc(df, df)\n        df[\"linear_acc_x\"], df[\"linear_acc_y\"], df[\"linear_acc_z\"] = linear_accel[:, 0], linear_accel[:, 1], linear_accel[:, 2]\n        df[\"linear_acc_mag\"] = np.sqrt(np.sum(linear_accel**2, axis=1))\n        df[\"linear_acc_mag_jerk\"] = df[\"linear_acc_mag\"].diff().fillna(0)\n        angular_vel = calculate_angular_velocity_from_quat(df)\n        df[\"angular_vel_x\"], df[\"angular_vel_y\"], df[\"angular_vel_z\"] = angular_vel[:, 0], angular_vel[:, 1], angular_vel[:, 2]\n\n        # --- Stage C: Data Preparation ---\n        log(\"Preparing data matrix for model...\")\n        feature_cols = LOADED_ARTIFACTS['feature_cols']\n        # Ensure all columns from training are present, filling missing ones with 0\n        for col in feature_cols:\n            if col not in df.columns:\n                df[col] = 0\n        features = df[feature_cols].ffill().bfill().fillna(0).values.astype(np.float32)\n\n        # Pad and scale the sequence exactly as in training\n        pad_length = LOADED_ARTIFACTS['pad_length']\n        padded = np.zeros((pad_length, features.shape[1]), dtype=np.float32)\n        seq_len = min(len(features), pad_length)\n        padded[:seq_len] = features[:seq_len]\n\n        scaled = LOADED_ARTIFACTS['scaler'].transform(padded)\n        X_input = scaled.reshape(1, pad_length, len(feature_cols))\n\n        # --- Stage D: Ensemble Prediction ---\n        log(\"Running ensemble prediction...\")\n        all_preds = []\n        for model in LOADED_ARTIFACTS['models']:\n            pred_probs = model.predict(X_input, verbose=0)\n            all_preds.append(pred_probs[0])\n\n        # Average the predictions from all models\n        avg_pred_proba = np.mean(all_preds, axis=0)\n        predicted_class_int = np.argmax(avg_pred_proba)\n        prediction = LOADED_ARTIFACTS['label_encoder'].classes_[predicted_class_int]\n        log(f\"Prediction complete. Predicted gesture: '{prediction}'\")\n        log(\"--- PREDICTION END ---\\n\")\n        return prediction\n\n    except Exception as e:\n        # If any error occurs, log it and return a default value as required by the competition.\n        log(f\"FATAL ERROR in predict function: {e}\\n{traceback.format_exc()}\")\n        # Returning a default valid gesture is often better than failing.\n        # You can change 'unknown' to the most frequent class if needed.\n        return 'unknown'\n\n# =================================================================================\n# STEP 3: Kaggle Server Initialization\n# =================================================================================\nimport kaggle_evaluation.cmi_inference_server\n\nlog(\"Initializing Kaggle inference server...\")\ninference_server = kaggle_evaluation.cmi_inference_server.CMIInferenceServer(predict)\n\n# The server is started only when the KAGGLE_IS_COMPETITION_RERUN environment variable is set.\n# For local testing, it runs a local gateway.\nif os.getenv('KAGGLE_IS_COMPETITION_RERUN'):\n    log(\"Starting server in competition mode.\")\n    inference_server.serve()\nelse:\n    log(\"Starting server in local test mode.\")\n    # In local mode, you need to provide paths to local test data.\n    local_test_data = '/kaggle/input/cmi-detect-behavior-with-sensor-data/test.csv'\n    local_test_demographics = '/kaggle/input/cmi-detect-behavior-with-sensor-data/test_demographics.csv'\n    if os.path.exists(local_test_data):\n         inference_server.run_local_gateway(\n             data_paths=(local_test_data, local_test_demographics)\n         )\n    else:\n        log(\"Local test files not found. Submission script finished without local test.\")\n\nlog(\"Submission script execution finished.\")\n```\n\n\nI'm getting the following error:\n\n```\n[13:49:22] Defining global helper functions for feature engineering.\n[13:49:22] Global helper functions are defined.\n[13:49:22] Initializing Kaggle inference server...\n[13:49:22] Starting server in local test mode.\n[13:49:22] --- PREDICTION START ---\n[13:49:22] First run: Loading models and artifacts...\n[13:49:22]   -> Loading model: model_fold_0.h5\n[13:49:23]   -> Loading model: model_fold_1.h5\n[13:49:24]   -> Loading model: model_fold_2.h5\n[13:49:24]   -> Loading model: model_fold_3.h5\n[13:49:25] Artifacts and 4 models loaded and cached.\n[13:49:25] Performing feature engineering...\n[13:49:25] Preparing data matrix for model...\n[13:49:25] Running ensemble prediction...\n[13:49:31] Prediction complete. Predicted gesture: 'Forehead - scratch'\n[13:49:31] --- PREDICTION END ---\n\n---------------------------------------------------------------------------\nGatewayRuntimeError                       Traceback (most recent call last)\n/tmp/ipykernel_36/1179446127.py in <cell line: 0>()\n    195     local_test_demographics = '/kaggle/input/cmi-detect-behavior-with-sensor-data/test_demographics.csv'\n    196     if os.path.exists(local_test_data):\n--> 197          inference_server.run_local_gateway(\n    198              data_paths=(local_test_data, local_test_demographics)\n    199          )\n\n/kaggle/input/cmi-detect-behavior-with-sensor-data/kaggle_evaluation/core/templates.py in run_local_gateway(self, data_paths, file_share_dir, *args, **kwargs)\n    147             self.gateway.run()\n    148         except Exception as err:\n--> 149             raise err from None\n    150         finally:\n    151             self.server.stop(0)\n\n/kaggle/input/cmi-detect-behavior-with-sensor-data/kaggle_evaluation/core/templates.py in run_local_gateway(self, data_paths, file_share_dir, *args, **kwargs)\n    145         try:\n    146             self.gateway = self._get_gateway_for_test(data_paths, file_share_dir, *args, **kwargs)\n--> 147             self.gateway.run()\n    148         except Exception as err:\n    149             raise err from None\n\n/kaggle/input/cmi-detect-behavior-with-sensor-data/kaggle_evaluation/core/templates.py in run(self)\n    103         elif error:\n    104             # For local testing\n--> 105             raise error\n    106 \n    107 \n\n/kaggle/input/cmi-detect-behavior-with-sensor-data/kaggle_evaluation/core/templates.py in run(self)\n     82         try:\n     83             self.unpack_data_paths()\n---> 84             predictions, row_ids = self.get_all_predictions()\n     85             self.write_submission(predictions, row_ids)\n     86         except kaggle_evaluation.core.base_gateway.GatewayRuntimeError as gre:\n\n/kaggle/input/cmi-detect-behavior-with-sensor-data/kaggle_evaluation/core/templates.py in get_all_predictions(self)\n     54         all_row_ids = []\n     55         for data_batch, row_ids in self.generate_data_batches():\n---> 56             predictions = self.predict(*data_batch)\n     57             self.validate_prediction_batch(predictions, row_ids)\n     58             all_predictions.append(predictions)\n\n/kaggle/input/cmi-detect-behavior-with-sensor-data/kaggle_evaluation/core/templates.py in predict(self, *args, **kwargs)\n     70             return self.client.send('predict', *args, **kwargs)\n     71         except Exception as e:\n---> 72             self.handle_server_error(e, 'predict')\n     73 \n     74     def set_response_timeout_seconds(self, timeout_seconds: int) -> None:\n\n/kaggle/input/cmi-detect-behavior-with-sensor-data/kaggle_evaluation/core/base_gateway.py in handle_server_error(self, exception, endpoint)\n    255             message_match = re.search('\"Exception calling application: (.*)\"', exception_str, re.IGNORECASE)\n    256             message = message_match.group(1) if message_match else exception_str\n--> 257             raise GatewayRuntimeError(GatewayRuntimeErrorType.SERVER_RAISED_EXCEPTION, message) from None\n    258         if isinstance(exception, grpc._channel._InactiveRpcError):\n    259             raise GatewayRuntimeError(GatewayRuntimeErrorType.SERVER_CONNECTION_FAILED, exception_str) from None\n\nGatewayRuntimeError: (<GatewayRuntimeErrorType.SERVER_RAISED_EXCEPTION: 3>, '')\n```\n\nCan you help me on fixing this so that I can submit?",
    "3255391": "Modify `kaggle_evaluation` folder of this competition and create a new dataset or model using it. Then you can edit the code and import this folder as module and replace `kaggle_evaluation.cmi_inference_server` for debug.",
    "3267625": "rithulkamesh hey were you able to resolve this issue?",
    "3271758": "I had the same issue; check the result type of your model; if it's numpy.str_ you should convert it to str.\nFor me it worked."
  },
  "source": "meta"
}