diff --git a/samples/float_model_embedding/CMakeLists.txt b/samples/float_model_embedding/CMakeLists.txt
index f3445e9..30d67f0 100644
--- a/samples/float_model_embedding/CMakeLists.txt
+++ b/samples/float_model_embedding/CMakeLists.txt
@@ -156,6 +156,8 @@
 #
 # to increase it.
 
+# Currently only the person_detection model can run with springbok (b/196910893)
+
 if(NOT ${BUILD_WITH_SPRINGBOK})
   iree_cc_binary(
     NAME
diff --git a/samples/quant_model_embedding/CMakeLists.txt b/samples/quant_model_embedding/CMakeLists.txt
new file mode 100644
index 0000000..9a36686
--- /dev/null
+++ b/samples/quant_model_embedding/CMakeLists.txt
@@ -0,0 +1,240 @@
+#-------------------------------------------------------------------------------
+# Build the mlir bytecode modules with iree-translate. Note the last two flags
+# and "+experimental-v" are for RVV support.
+#-------------------------------------------------------------------------------
+
+if(NOT ${BUILD_INTERNAL_MODELS})
+  return()
+endif()
+
+if(NOT ${BUILD_WITH_SPRINGBOK})
+# TODO(b/198476354): uncomment below after operator tosa.clz is supported
+#  springbok_bytecode_module(
+#    NAME
+#      mobilenet_v2_bytecode_module_dylib
+#    SRC
+#      "$ENV{ROOTDIR}/ml/ml-models/quant_models/mobilenet_v2_1.0_224_quant.tflite"
+#    C_IDENTIFIER
+#      "samples_quant_model_embedding_mobilenet_v2_bytecode_module_dylib"
+#    FLAGS
+#      "-iree-input-type=tosa"
+#      "-riscv-v-vector-bits-min=512"
+#      "-riscv-v-fixed-length-vector-lmul-max=8"
+#      "-riscv-v-fixed-length-vector-elen-max=32"
+#    PUBLIC
+#  )
+
+  springbok_bytecode_module(
+    NAME
+      scenenet_v2_bytecode_module_dylib
+    SRC
+      "$ENV{ROOTDIR}/ml/ml-models/quant_models/scenenet_v2_quant.tflite"
+    C_IDENTIFIER
+      "samples_quant_model_embedding_scenenet_v2_bytecode_module_dylib"
+    FLAGS
+      "-iree-input-type=tosa"
+      "-riscv-v-vector-bits-min=512"
+      "-riscv-v-fixed-length-vector-lmul-max=8"
+      "-riscv-v-fixed-length-vector-elen-max=32"
+    PUBLIC
+  )
+endif()
+
+springbok_bytecode_module(
+  NAME
+    barcode_bytecode_module_dylib
+  SRC
+    "$ENV{ROOTDIR}/ml/ml-models/quant_models/barcode_quant.tflite"
+  C_IDENTIFIER
+    "samples_quant_model_embedding_barcode_bytecode_module_dylib"
+  FLAGS
+    "-iree-input-type=tosa"
+    "-riscv-v-vector-bits-min=512"
+    "-riscv-v-fixed-length-vector-lmul-max=8"
+    "-riscv-v-fixed-length-vector-elen-max=32"
+  PUBLIC
+)
+
+springbok_bytecode_module(
+  NAME
+    daredevil_bytecode_module_dylib
+  SRC
+    "$ENV{ROOTDIR}/ml/ml-models/quant_models/daredevil_quant.tflite"
+  C_IDENTIFIER
+    "samples_quant_model_embedding_daredevil_bytecode_module_dylib"
+  FLAGS
+    "-iree-input-type=tosa"
+    "-riscv-v-vector-bits-min=512"
+    "-riscv-v-fixed-length-vector-lmul-max=8"
+    "-riscv-v-fixed-length-vector-elen-max=32"
+  PUBLIC
+)
+
+springbok_bytecode_module(
+  NAME
+    fssd_25_8bit_v2_bytecode_module_dylib
+  SRC
+    "$ENV{ROOTDIR}/ml/ml-models/quant_models/fssd_25_8bit_v2_quant.tflite"
+  C_IDENTIFIER
+    "samples_quant_model_embedding_fssd_25_8bit_v2_bytecode_module_dylib"
+  FLAGS
+    "-iree-input-type=tosa"
+    "-riscv-v-vector-bits-min=512"
+    "-riscv-v-fixed-length-vector-lmul-max=8"
+    "-riscv-v-fixed-length-vector-elen-max=32"
+  PUBLIC
+)
+
+# TODO(b/198476354): uncomment below after operator tosa.clz is supported
+#springbok_bytecode_module(
+#  NAME
+#    mobilenet_v1_bytecode_module_dylib
+#  SRC
+#    "$ENV{ROOTDIR}/ml/ml-models/quant_models/mobilenet_v1_0.25_224_quant.tflite"
+#  C_IDENTIFIER
+#    "samples_quant_model_embedding_mobilenet_v1_bytecode_module_dylib"
+#  FLAGS
+#    "-iree-input-type=tosa"
+#    "-riscv-v-vector-bits-min=512"
+#    "-riscv-v-fixed-length-vector-lmul-max=8"
+#    "-riscv-v-fixed-length-vector-elen-max=32"
+#  PUBLIC
+#)
+
+#springbok_bytecode_module(
+#  NAME
+#    person_detection_bytecode_module_dylib
+#  SRC
+#    "$ENV{ROOTDIR}/ml/ml-models/quant_models/person_detection_quant.tflite"
+#  C_IDENTIFIER
+#    "samples_quant_model_embedding_person_detection_bytecode_module_dylib"
+#  FLAGS
+#    "-iree-input-type=tosa"
+#    "-riscv-v-vector-bits-min=512"
+#    "-riscv-v-fixed-length-vector-lmul-max=8"
+#    "-riscv-v-fixed-length-vector-elen-max=32"
+#  PUBLIC
+#)
+
+springbok_bytecode_module(
+  NAME
+    voice_commands_bytecode_module_dylib
+  SRC
+    "$ENV{ROOTDIR}/ml/ml-models/quant_models/voice_commands_quant.tflite"
+  C_IDENTIFIER
+    "samples_quant_model_embedding_voice_commands_bytecode_module_dylib"
+  FLAGS
+    "-iree-input-type=tosa"
+    "-riscv-v-vector-bits-min=512"
+    "-riscv-v-fixed-length-vector-lmul-max=8"
+    "-riscv-v-fixed-length-vector-elen-max=32"
+  PUBLIC
+)
+
+#-------------------------------------------------------------------------------
+# Binaries to execute the MLIR bytecode modules
+#-------------------------------------------------------------------------------
+
+
+# If the program requires a larger stack size, add
+#
+#   LINKOPTS
+#     "LINKER:--defsym=__stack_size__=<new stack size>"
+#
+# to increase it.
+
+# Currently only the daredevil model can run with springbok (b/196910893)
+
+if(NOT ${BUILD_WITH_SPRINGBOK})
+# TODO(b/198476354): uncomment below after operator tosa.clz is supported
+#  iree_cc_binary(
+#    NAME
+#      mobilenet_v2_embedded_sync
+#    SRCS
+#      "mobilenet_v2.c"
+#    DEPS
+#      ::mobilenet_v2_bytecode_module_dylib_c
+#      samples::util::util
+#  )
+
+  iree_cc_binary(
+    NAME
+      scenenet_v2_embedded_sync
+    SRCS
+      "scenenet_v2.c"
+    DEPS
+      ::scenenet_v2_bytecode_module_dylib_c
+      samples::util::util
+  )
+endif()
+
+iree_cc_binary(
+  NAME
+    barcode_embedded_sync
+  SRCS
+    "barcode.c"
+  DEPS
+    ::barcode_bytecode_module_dylib_c
+    samples::util::util
+  LINKOPTS
+    "LINKER:--defsym=__stack_size__=100k"
+)
+
+iree_cc_binary(
+  NAME
+    daredevil_embedded_sync
+  SRCS
+    "daredevil.c"
+  DEPS
+    ::daredevil_bytecode_module_dylib_c
+    samples::util::util
+  LINKOPTS
+    "LINKER:--defsym=__stack_size__=100k"
+)
+
+iree_cc_binary(
+  NAME
+    fssd_25_8bit_v2_embedded_sync
+  SRCS
+    "fssd_25_8bit_v2.c"
+  DEPS
+    ::fssd_25_8bit_v2_bytecode_module_dylib_c
+    samples::util::util
+  LINKOPTS
+    "LINKER:--defsym=__stack_size__=100k"
+)
+
+# TODO(b/198476354): uncomment below after operator tosa.clz is supported
+#iree_cc_binary(
+#  NAME
+#    mobilenet_v1_embedded_sync
+#  SRCS
+#    "mobilenet_v1.c"
+#  DEPS
+#    ::mobilenet_v1_bytecode_module_dylib_c
+#    samples::util::util
+#  LINKOPTS
+#    "LINKER:--defsym=__stack_size__=100k"
+#)
+
+#iree_cc_binary(
+#  NAME
+#    person_detection_embedded_sync
+#  SRCS
+#    "person_detection.c"
+#  DEPS
+#    ::person_detection_bytecode_module_dylib_c
+#    samples::util::util
+#  LINKOPTS
+#    "LINKER:--defsym=__stack_size__=100k"
+#)
+
+iree_cc_binary(
+  NAME
+    voice_commands_embedded_sync
+  SRCS
+    "voice_commands.c"
+  DEPS
+    ::voice_commands_bytecode_module_dylib_c
+    samples::util::util
+)
diff --git a/samples/quant_model_embedding/barcode.c b/samples/quant_model_embedding/barcode.c
new file mode 100644
index 0000000..4f89811
--- /dev/null
+++ b/samples/quant_model_embedding/barcode.c
@@ -0,0 +1,56 @@
+// Barcode quant model
+// MlModel struct initialization to include model I/O info.
+// Bytecode loading, input/output processes.
+
+#include <springbok.h>
+
+#include "iree/base/api.h"
+#include "iree/hal/api.h"
+#include "samples/util/util.h"
+
+// Compiled module embedded here to avoid file IO:
+#include "samples/quant_model_embedding/barcode_bytecode_module_dylib_c.h"
+
+const MlModel kModel = {
+    .num_input_dim = 4,
+    .input_shape = {1, 320, 320, 1},
+    .input_length = 320 * 320 * 1,
+    .input_size_bytes = sizeof(uint8_t),
+    .num_output = 12,
+    .output_length = {20 * 20 * 36, 20 * 20 * 9, 10 * 10 * 72, 10 * 10 * 18,
+                      5 * 5 * 72, 5 * 5 * 18, 3 * 3 * 72, 3 * 3 * 18,
+                      2 * 2 * 72, 2 * 2 * 18, 72, 18},
+    .output_size_bytes = sizeof(uint8_t),
+    .hal_element_type = IREE_HAL_ELEMENT_TYPE_UINT_8,
+    .model_name = "barcode_quant",
+};
+
+const iree_const_byte_span_t load_bytecode_module_data() {
+  const struct iree_file_toc_t *module_file_toc =
+      samples_quant_model_embedding_barcode_bytecode_module_dylib_create();
+  return iree_make_const_byte_span(module_file_toc->data,
+                                   module_file_toc->size);
+}
+
+iree_status_t load_input_data(const MlModel *model, void **buffer) {
+  // Populate initial value
+  srand(768954);
+  for (int i = 0; i < model->input_length; ++i) {
+    ((uint8_t *)*buffer)[i] = rand() % 256;
+  }
+  return iree_ok_status();
+}
+
+iree_status_t check_output_data(const MlModel *model,
+                                iree_hal_buffer_mapping_t *mapped_memory,
+                                int index_output) {
+  iree_status_t result = iree_ok_status();
+  if (index_output > model->num_output ||
+      mapped_memory->contents.data_length / model->output_size_bytes !=
+          model->output_length[index_output]) {
+    result = iree_make_status(IREE_STATUS_UNKNOWN, "output length mismatches");
+  }
+  LOG_INFO("Output #%d data length: %d \n", index_output,
+           mapped_memory->contents.data_length / model->output_size_bytes);
+  return result;
+}
diff --git a/samples/quant_model_embedding/daredevil.c b/samples/quant_model_embedding/daredevil.c
new file mode 100644
index 0000000..c234929
--- /dev/null
+++ b/samples/quant_model_embedding/daredevil.c
@@ -0,0 +1,54 @@
+// Daredevil quant model
+// MlModel struct initialization to include model I/O info.
+// Bytecode loading, input/output processes.
+
+#include <springbok.h>
+
+#include "iree/base/api.h"
+#include "iree/hal/api.h"
+#include "samples/util/util.h"
+
+// Compiled module embedded here to avoid file IO:
+#include "samples/quant_model_embedding/daredevil_bytecode_module_dylib_c.h"
+
+const MlModel kModel = {
+    .num_input_dim = 3,
+    .input_shape = {1, 96, 64},
+    .input_length = 96 * 64,
+    .input_size_bytes = sizeof(uint8_t),
+    .num_output = 1,
+    .output_length = {527},
+    .output_size_bytes = sizeof(uint8_t),
+    .hal_element_type = IREE_HAL_ELEMENT_TYPE_UINT_8,
+    .model_name = "daredevil_quant",
+};
+
+const iree_const_byte_span_t load_bytecode_module_data() {
+  const struct iree_file_toc_t *module_file_toc =
+      samples_quant_model_embedding_daredevil_bytecode_module_dylib_create();
+  return iree_make_const_byte_span(module_file_toc->data,
+                                   module_file_toc->size);
+}
+
+iree_status_t load_input_data(const MlModel *model, void **buffer) {
+  // Populate initial value
+  srand(3689964);
+  for (int i = 0; i < model->input_length; ++i) {
+    ((uint8_t *)*buffer)[i] = rand() % 256;
+  }
+  return iree_ok_status();
+}
+
+iree_status_t check_output_data(const MlModel *model,
+                                iree_hal_buffer_mapping_t *mapped_memory,
+                                int index_output) {
+  iree_status_t result = iree_ok_status();
+  if (index_output > model->num_output ||
+      mapped_memory->contents.data_length / model->output_size_bytes !=
+          model->output_length[index_output]) {
+    result = iree_make_status(IREE_STATUS_UNKNOWN, "output length mismatches");
+  }
+  LOG_INFO("Output #%d data length: %d \n", index_output,
+           mapped_memory->contents.data_length / model->output_size_bytes);
+  return result;
+}
diff --git a/samples/quant_model_embedding/fssd_25_8bit_v2.c b/samples/quant_model_embedding/fssd_25_8bit_v2.c
new file mode 100644
index 0000000..ad72fac
--- /dev/null
+++ b/samples/quant_model_embedding/fssd_25_8bit_v2.c
@@ -0,0 +1,55 @@
+// Fssd_25_8bit_v2 quant model
+// MlModel struct initialization to include model I/O info.
+// Bytecode loading, input/output processes.
+
+#include <springbok.h>
+
+#include "iree/base/api.h"
+#include "iree/hal/api.h"
+#include "samples/util/util.h"
+
+// Compiled module embedded here to avoid file IO:
+#include "samples/quant_model_embedding/fssd_25_8bit_v2_bytecode_module_dylib_c.h"
+
+const MlModel kModel = {
+    .num_input_dim = 4,
+    .input_shape = {1, 320, 320, 3},
+    .input_length = 320 * 320 * 3,
+    .input_size_bytes = sizeof(uint8_t),
+    .num_output = 8,
+    .output_length = {20 * 20 * 48, 20 * 20 * 3, 10 * 10 * 48, 10 * 10 * 3,
+                      5 * 5 * 48, 5 * 5 * 3, 3 * 3 * 48, 3 * 3 * 3},
+    .output_size_bytes = sizeof(uint8_t),
+    .hal_element_type = IREE_HAL_ELEMENT_TYPE_UINT_8,
+    .model_name = "fssd_25_8bit_v2_quant",
+};
+
+const iree_const_byte_span_t load_bytecode_module_data() {
+  const struct iree_file_toc_t *module_file_toc =
+      samples_quant_model_embedding_fssd_25_8bit_v2_bytecode_module_dylib_create();
+  return iree_make_const_byte_span(module_file_toc->data,
+                                   module_file_toc->size);
+}
+
+iree_status_t load_input_data(const MlModel *model, void **buffer) {
+  // Populate initial value
+  srand(11111111);
+  for (int i = 0; i < model->input_length; ++i) {
+    ((uint8_t *)*buffer)[i] = rand() % 256;
+  }
+  return iree_ok_status();
+}
+
+iree_status_t check_output_data(const MlModel *model,
+                                iree_hal_buffer_mapping_t *mapped_memory,
+                                int index_output) {
+  iree_status_t result = iree_ok_status();
+  if (index_output > model->num_output ||
+      mapped_memory->contents.data_length / model->output_size_bytes !=
+          model->output_length[index_output]) {
+    result = iree_make_status(IREE_STATUS_UNKNOWN, "output length mismatches");
+  }
+  LOG_INFO("Output #%d data length: %d \n", index_output,
+           mapped_memory->contents.data_length / model->output_size_bytes);
+  return result;
+}
diff --git a/samples/quant_model_embedding/mobilenet_v1.c b/samples/quant_model_embedding/mobilenet_v1.c
new file mode 100644
index 0000000..b75aca5
--- /dev/null
+++ b/samples/quant_model_embedding/mobilenet_v1.c
@@ -0,0 +1,54 @@
+// Mobilenet_v1_0.25_224 quant model
+// MlModel struct initialization to include model I/O info.
+// Bytecode loading, input/output processes.
+
+#include <springbok.h>
+
+#include "iree/base/api.h"
+#include "iree/hal/api.h"
+#include "samples/util/util.h"
+
+// Compiled module embedded here to avoid file IO:
+#include "samples/quant_model_embedding/mobilenet_v1_bytecode_module_dylib_c.h"
+
+const MlModel kModel = {
+    .num_input_dim = 4,
+    .input_shape = {1, 224, 224, 3},
+    .input_length = 224 * 224 * 3,
+    .input_size_bytes = sizeof(uint8_t),
+    .num_output = 1,
+    .output_length = {1001},
+    .output_size_bytes = sizeof(uint8_t),
+    .hal_element_type = IREE_HAL_ELEMENT_TYPE_UINT_8,
+    .model_name = "mobilenet_v1_0.25_224_quant",
+};
+
+const iree_const_byte_span_t load_bytecode_module_data() {
+  const struct iree_file_toc_t *module_file_toc =
+      samples_quant_model_embedding_mobilenet_v1_bytecode_module_dylib_create();
+  return iree_make_const_byte_span(module_file_toc->data,
+                                   module_file_toc->size);
+}
+
+iree_status_t load_input_data(const MlModel *model, void **buffer) {
+  // Populate initial value
+  srand(33333333);
+  for (int i = 0; i < model->input_length; ++i) {
+    ((uint8_t *)*buffer)[i] = rand() % 256;
+  }
+  return iree_ok_status();
+}
+
+iree_status_t check_output_data(const MlModel *model,
+                                iree_hal_buffer_mapping_t *mapped_memory,
+                                int index_output) {
+  iree_status_t result = iree_ok_status();
+  if (index_output > model->num_output ||
+      mapped_memory->contents.data_length / model->output_size_bytes !=
+          model->output_length[index_output]) {
+    result = iree_make_status(IREE_STATUS_UNKNOWN, "output length mismatches");
+  }
+  LOG_INFO("Output #%d data length: %d \n", index_output,
+           mapped_memory->contents.data_length / model->output_size_bytes);
+  return result;
+}
diff --git a/samples/quant_model_embedding/mobilenet_v2.c b/samples/quant_model_embedding/mobilenet_v2.c
new file mode 100644
index 0000000..021171a
--- /dev/null
+++ b/samples/quant_model_embedding/mobilenet_v2.c
@@ -0,0 +1,54 @@
+// Mobilenet_v2_1.0_224 quant model
+// MlModel struct initialization to include model I/O info.
+// Bytecode loading, input/output processes.
+
+#include <springbok.h>
+
+#include "iree/base/api.h"
+#include "iree/hal/api.h"
+#include "samples/util/util.h"
+
+// Compiled module embedded here to avoid file IO:
+#include "samples/quant_model_embedding/mobilenet_v2_bytecode_module_dylib_c.h"
+
+const MlModel kModel = {
+    .num_input_dim = 4,
+    .input_shape = {1, 224, 224, 3},
+    .input_length = 224 * 224 * 3,
+    .input_size_bytes = sizeof(uint8_t),
+    .num_output = 1,
+    .output_length = {1001},
+    .output_size_bytes = sizeof(uint8_t),
+    .hal_element_type = IREE_HAL_ELEMENT_TYPE_UINT_8,
+    .model_name = "mobilenet_v2_1.0_224_quant",
+};
+
+const iree_const_byte_span_t load_bytecode_module_data() {
+  const struct iree_file_toc_t *module_file_toc =
+      samples_quant_model_embedding_mobilenet_v2_bytecode_module_dylib_create();
+  return iree_make_const_byte_span(module_file_toc->data,
+                                   module_file_toc->size);
+}
+
+iree_status_t load_input_data(const MlModel *model, void **buffer) {
+  // Populate initial value
+  srand(33333333);
+  for (int i = 0; i < model->input_length; ++i) {
+    ((uint8_t *)*buffer)[i] = rand() % 256;
+  }
+  return iree_ok_status();
+}
+
+iree_status_t check_output_data(const MlModel *model,
+                                iree_hal_buffer_mapping_t *mapped_memory,
+                                int index_output) {
+  iree_status_t result = iree_ok_status();
+  if (index_output > model->num_output ||
+      mapped_memory->contents.data_length / model->output_size_bytes !=
+          model->output_length[index_output]) {
+    result = iree_make_status(IREE_STATUS_UNKNOWN, "output length mismatches");
+  }
+  LOG_INFO("Output #%d data length: %d \n", index_output,
+           mapped_memory->contents.data_length / model->output_size_bytes);
+  return result;
+}
diff --git a/samples/quant_model_embedding/person_detection.c b/samples/quant_model_embedding/person_detection.c
new file mode 100644
index 0000000..fc10fd9
--- /dev/null
+++ b/samples/quant_model_embedding/person_detection.c
@@ -0,0 +1,54 @@
+// Person_detection quant model
+// MlModel struct initialization to include model I/O info.
+// Bytecode loading, input/output processes.
+
+#include <springbok.h>
+
+#include "iree/base/api.h"
+#include "iree/hal/api.h"
+#include "samples/util/util.h"
+
+// Compiled module embedded here to avoid file IO:
+#include "samples/quant_model_embedding/person_detection_bytecode_module_dylib_c.h"
+
+const MlModel kModel = {
+    .num_input_dim = 4,
+    .input_shape = {1, 96, 96, 1},
+    .input_length = 96 * 96 * 1,
+    .input_size_bytes = sizeof(int8_t),
+    .num_output = 1,
+    .output_length = {2},
+    .output_size_bytes = sizeof(int8_t),
+    .hal_element_type = IREE_HAL_ELEMENT_TYPE_SINT_8,
+    .model_name = "person_detection_quant",
+};
+
+const iree_const_byte_span_t load_bytecode_module_data() {
+  const struct iree_file_toc_t *module_file_toc =
+      samples_quant_model_embedding_person_detection_bytecode_module_dylib_create();
+  return iree_make_const_byte_span(module_file_toc->data,
+                                   module_file_toc->size);
+}
+
+iree_status_t load_input_data(const MlModel *model, void **buffer) {
+  // Populate initial value
+  srand(44444444);
+  for (int i = 0; i < model->input_length; ++i) {
+    ((int8_t *)*buffer)[i] = rand() % 256 - 128;
+  }
+  return iree_ok_status();
+}
+
+iree_status_t check_output_data(const MlModel *model,
+                                iree_hal_buffer_mapping_t *mapped_memory,
+                                int index_output) {
+  iree_status_t result = iree_ok_status();
+  if (index_output > model->num_output ||
+      mapped_memory->contents.data_length / model->output_size_bytes !=
+          model->output_length[index_output]) {
+    result = iree_make_status(IREE_STATUS_UNKNOWN, "output length mismatches");
+  }
+  LOG_INFO("Output #%d data length: %d \n", index_output,
+           mapped_memory->contents.data_length / model->output_size_bytes);
+  return result;
+}
diff --git a/samples/quant_model_embedding/scenenet_v2.c b/samples/quant_model_embedding/scenenet_v2.c
new file mode 100644
index 0000000..9678eae
--- /dev/null
+++ b/samples/quant_model_embedding/scenenet_v2.c
@@ -0,0 +1,54 @@
+// Scenenet_v2 quant model
+// MlModel struct initialization to include model I/O info.
+// Bytecode loading, input/output processes.
+
+#include <springbok.h>
+
+#include "iree/base/api.h"
+#include "iree/hal/api.h"
+#include "samples/util/util.h"
+
+// Compiled module embedded here to avoid file IO:
+#include "samples/quant_model_embedding/scenenet_v2_bytecode_module_dylib_c.h"
+
+const MlModel kModel = {
+    .num_input_dim = 4,
+    .input_shape = {1, 192, 192, 3},
+    .input_length = 192 * 192 * 3,
+    .input_size_bytes = sizeof(uint8_t),
+    .num_output = 1,
+    .output_length = {170},
+    .output_size_bytes = sizeof(float),
+    .hal_element_type = IREE_HAL_ELEMENT_TYPE_UINT_8,
+    .model_name = "scenenet_v2_quant",
+};
+
+const iree_const_byte_span_t load_bytecode_module_data() {
+  const struct iree_file_toc_t *module_file_toc =
+      samples_quant_model_embedding_scenenet_v2_bytecode_module_dylib_create();
+  return iree_make_const_byte_span(module_file_toc->data,
+                                   module_file_toc->size);
+}
+
+iree_status_t load_input_data(const MlModel *model, void **buffer) {
+  // Populate initial value
+  srand(55555555);
+  for (int i = 0; i < model->input_length; ++i) {
+    ((uint8_t *)*buffer)[i] = rand() % 256;
+  }
+  return iree_ok_status();
+}
+
+iree_status_t check_output_data(const MlModel *model,
+                                iree_hal_buffer_mapping_t *mapped_memory,
+                                int index_output) {
+  iree_status_t result = iree_ok_status();
+  if (index_output > model->num_output ||
+      mapped_memory->contents.data_length / model->output_size_bytes !=
+          model->output_length[index_output]) {
+    result = iree_make_status(IREE_STATUS_UNKNOWN, "output length mismatches");
+  }
+  LOG_INFO("Output #%d data length: %d \n", index_output,
+           mapped_memory->contents.data_length / model->output_size_bytes);
+  return result;
+}
diff --git a/samples/quant_model_embedding/voice_commands.c b/samples/quant_model_embedding/voice_commands.c
new file mode 100644
index 0000000..ca725f3
--- /dev/null
+++ b/samples/quant_model_embedding/voice_commands.c
@@ -0,0 +1,54 @@
+// Voice_commands quant model
+// MlModel struct initialization to include model I/O info.
+// Bytecode loading, input/output processes.
+
+#include <springbok.h>
+
+#include "iree/base/api.h"
+#include "iree/hal/api.h"
+#include "samples/util/util.h"
+
+// Compiled module embedded here to avoid file IO:
+#include "samples/quant_model_embedding/voice_commands_bytecode_module_dylib_c.h"
+
+const MlModel kModel = {
+    .num_input_dim = 3,
+    .input_shape = {1, 198, 32},
+    .input_length = 198 * 32,
+    .input_size_bytes = sizeof(uint8_t),
+    .num_output = 1,
+    .output_length = {63},
+    .output_size_bytes = sizeof(float),
+    .hal_element_type = IREE_HAL_ELEMENT_TYPE_UINT_8,
+    .model_name = "voice_commands_quant",
+};
+
+const iree_const_byte_span_t load_bytecode_module_data() {
+  const struct iree_file_toc_t *module_file_toc =
+      samples_quant_model_embedding_voice_commands_bytecode_module_dylib_create();
+  return iree_make_const_byte_span(module_file_toc->data,
+                                   module_file_toc->size);
+}
+
+iree_status_t load_input_data(const MlModel *model, void **buffer) {
+  // Populate initial value
+  srand(77777777);
+  for (int i = 0; i < model->input_length; ++i) {
+    ((uint8_t *)*buffer)[i] = rand() % 256;
+  }
+  return iree_ok_status();
+}
+
+iree_status_t check_output_data(const MlModel *model,
+                                iree_hal_buffer_mapping_t *mapped_memory,
+                                int index_output) {
+  iree_status_t result = iree_ok_status();
+  if (index_output > model->num_output ||
+      mapped_memory->contents.data_length / model->output_size_bytes !=
+          model->output_length[index_output]) {
+    result = iree_make_status(IREE_STATUS_UNKNOWN, "output length mismatches");
+  }
+  LOG_INFO("Output #%d data length: %d \n", index_output,
+           mapped_memory->contents.data_length / model->output_size_bytes);
+  return result;
+}
