#include <stdio.h> // `printf`
#include <string.h> // `strlen`
#include <uform/uform.h>
int main(int argc, char** argv) {
if (argc != 2) return 1;
uform_outcome_t outcome = {0};
uform_executor_t executor = NULL;
uform_executor_for_ram(&(uform_executor_for_ram_t){.executor = &executor, .outcome = &outcome});
if (outcome.status != uform_status_success_k) return printf("%s\n", outcome.message), 1;
uform_model_t model = NULL;
uform_model_load_ram(&(uform_model_load_ram_t){
.model = &model, .executor = executor, .outcome = &outcome,
.path = {(uint8_t const*)argv[1], strlen(argv[1])}, .quantization = uform_scalar_bf16_k});
if (outcome.status != uform_status_success_k) return printf("%s\n", outcome.message), 1;
uform_arena_t arena = NULL;
uform_arena_init(&(uform_arena_init_t){.arena = &arena, .executor = executor, .outcome = &outcome});
char const texts[] = "a cat on a matsunrise over the bay";
size_t const offsets[] = {0, 14, 34};
uform_rows_view_t embeddings = {0};
uform_text_encode(&(uform_text_encode_t){
.model = model, .executor = executor, .outcome = &outcome, .count = 2,
.texts = {texts, offsets, uform_scalar_u8_k}, .embeddings = &embeddings, .arena = arena,
.outputs_scalar = uform_scalar_f32_k});
if (outcome.status == uform_status_success_k)
printf("%zu embeddings of %zu dimensions\n", (size_t)2, embeddings.columns);
uform_arena_free(arena);
uform_model_free(model);
uform_executor_free(executor);
return outcome.status != uform_status_success_k;
}