C · Quickstart

Quickstart

4.0.0-rc.1 · 3ee5e534

#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;
}