Skip to content

Generate Embedding

This is the functions signature of generate_embeddings:

function generate_embeddings (
p_input in json_array_t
, p_provider in provider_type
, p_model in model_type
) return json_array_t;

Most notably p_input receives an array of strings as generate_embeddings which the function embeds in one go also returning an array of embeddings.

ParameterTypeRequiredDescription
p_inputjson_array_tYesArray of texts to embed
p_providerprovider_typeYesAI provider to use. See uc_ai spec for constants.
p_modelmodel_typeYesSpecific AI model to use (varies by provider). See uc_ai spec for constants.

The return is an array of arrays. As you can pass multiple input texts you can get back multiple vectors. The first vector represents the first input text and so on.

declare
l_result json_array_t;
l_array_clob clob;
begin
uc_ai.g_base_url := 'host.containers.internal:11434/api';
uc_ai.g_enable_tools := false; -- disable tools for this test
uc_ai.g_enable_reasoning := false; -- disable reasoning for this test
l_result := uc_ai.generate_embeddings(
p_input => json_array_t('["APEX Office Print lets you create and manage print jobs directly from your APEX applications.", "UC AI allows you to easily use AI from PL/SQL"]'),
p_provider => uc_ai.c_provider_ollama,
p_model => 'granite-embedding:30m'
);
-- example result:
-- [
-- [0.340329043034, 0.2334029034, ...]
-- [0.954233454545, 0.5343434023, ...]
-- ]
-- l_result.get_size → 2
-- l_result.get(0) → [0.340329043034, 0.2334029034, ...]
end;

You can convert the result to an Oracle Vector datatype on 23ai or 26ai with the following command (docs):

declare
l_result json_array_t := json_array_t('[0.340329043034, 0.2334029034]');
l_my_vector vector;
begin
-- convert JSON array to Oracle native vector type:
l_my_vector := vector(l_result.to_clob);
-- log Oracle native vector type
sys.dbms_output.put_line(from_vector(l_my_vector));
end;

On older databases you can send the JSON array vector to any third party vector database or process it manually.