src/tflite_beam/tflite_beam_interpreter_builder.erl

%% @doc
%% Build an interpreter capable of interpreting model.

-module(tflite_beam_interpreter_builder).
-export([
    new/2,
    build/2,
    set_num_threads/2
]).

-include("tflite_beam_records.hrl").

%% @doc New InterpreterBuilder
-spec new(#tflite_beam_flatbuffer_model{} | reference(), reference()) -> {ok, reference()} | {error, binary()}.
new(#tflite_beam_flatbuffer_model{ref = Model}, Resolver) when is_reference(Model) and is_reference(Resolver) ->
    new(Model, Resolver);
new(Model, Resolver) when is_reference(Model) and is_reference(Resolver) ->
    tflite_beam_nif:interpreter_builder_new(Model, Resolver).

%% @doc
%% Build the interpreter with the InterpreterBuilder.
%%
%% Note: all Interpreters should be built with the InterpreterBuilder,
%% which allocates memory for the Interpreter and does various set up
%% tasks so that the Interpreter can read the provided model.
-spec build(reference(), reference()) -> ok | {error, binary}.
build(Builder, Interpreter) when is_reference(Builder) and is_reference(Interpreter) ->
    tflite_beam_nif:interpreter_builder_build(Builder, Interpreter).

%% @doc
%% Sets the number of CPU threads to use for the interpreter.
%% Returns `true' on success, `{error, reason}' on error.
-spec set_num_threads(reference(), pos_integer()) -> ok | {error, binary}.
set_num_threads(Builder, NumThreads) when is_reference(Builder) and is_integer(NumThreads) ->
    tflite_beam_nif:interpreter_builder_set_num_threads(Builder, NumThreads).