Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions docs/reference/ai/extai.rst
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,7 @@ Example provider configuration:

* ``OpenAI``
* ``Anthropic``
* ``VoyageAI``


---------
Expand All @@ -309,6 +310,7 @@ Example provider configuration:
* ``ext::ai::OpenAIProviderConfig``
* ``ext::ai::MistralProviderConfig``
* ``ext::ai::AnthropicProviderConfig``
* ``ext::ai::VoyageAIProviderConfig``
* ``ext::ai::CustomProviderConfig``

Each inherits from :eql:type:`ext::ai::ProviderConfig` with provider-specific defaults.
Expand Down Expand Up @@ -345,6 +347,27 @@ Mistral (`documentation <https://docs.mistral.ai/capabilities/embeddings/#mistra

* ``mistral-embed``

VoyageAI (`documentation <https://docs.voyageai.com/docs/embeddings>`__)

Current generation models:

* ``voyage-4``
* ``voyage-4-lite``
* ``voyage-4-large``
* ``voyage-3-large``
* ``voyage-3.5``
* ``voyage-3.5-lite``
* ``voyage-code-3``
* ``voyage-context-3``

Legacy models (deprecated):

* ``voyage-3`` (use ``voyage-3.5`` instead)
* ``voyage-3-lite`` (use ``voyage-3.5-lite`` instead)
* ``voyage-code-2`` (use ``voyage-code-3`` instead)
* ``voyage-finance-2``
* ``voyage-law-2``

Ollama (`documentation <https://github.com/ollama/ollama/blob/main/docs/api.md#generate-embeddings>`__)

* ``nomic-embed-text``
Expand Down
245 changes: 244 additions & 1 deletion edb/lib/ext/ai.edgeql
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ CREATE EXTENSION PACKAGE ai VERSION '1.0' {
create permission ext::ai::perm::chat_prompt_write;

create scalar type ext::ai::ProviderAPIStyle
extending enum<OpenAI, Anthropic, Ollama>;
extending enum<OpenAI, Anthropic, Ollama, VoyageAI>;

create abstract type ext::ai::ProviderConfig extending cfg::ConfigObject {
create required property name: std::str {
Expand Down Expand Up @@ -142,6 +142,27 @@ CREATE EXTENSION PACKAGE ai VERSION '1.0' {
};
};

create type ext::ai::VoyageAIProviderConfig extending ext::ai::ProviderConfig {
alter property name {
set protected := true;
set default := 'builtin::voyageai';
};

alter property display_name {
set protected := true;
set default := 'VoyageAI';
};

alter property api_url {
set default := 'https://api.voyageai.com/v1'
};

alter property api_style {
set protected := true;
set default := ext::ai::ProviderAPIStyle.VoyageAI;
};
};

create type ext::ai::OllamaProviderConfig extending ext::ai::ProviderConfig {
alter property name {
set protected := true;
Expand Down Expand Up @@ -562,6 +583,228 @@ CREATE EXTENSION PACKAGE ai VERSION '1.0' {
ext::ai::text_gen_model_context_window := "200000";
};

# VoyageAI models
create abstract type ext::ai::Voyage4EmbedModel
extending ext::ai::EmbeddingModel
{
alter annotation
ext::ai::model_name := "voyage-4";
alter annotation
ext::ai::model_provider := "builtin::voyageai";
alter annotation
ext::ai::embedding_model_max_input_tokens := "32000";
alter annotation
ext::ai::embedding_model_max_batch_tokens := "320000";
alter annotation
ext::ai::embedding_model_max_output_dimensions := "1024";
alter annotation
ext::ai::embedding_model_supports_shortening := "true";
};

create abstract type ext::ai::Voyage4LiteEmbedModel
extending ext::ai::EmbeddingModel
{
alter annotation
ext::ai::model_name := "voyage-4-lite";
alter annotation
ext::ai::model_provider := "builtin::voyageai";
alter annotation
ext::ai::embedding_model_max_input_tokens := "32000";
alter annotation
ext::ai::embedding_model_max_batch_tokens := "1000000";
alter annotation
ext::ai::embedding_model_max_output_dimensions := "1024";
alter annotation
ext::ai::embedding_model_supports_shortening := "true";
};

create abstract type ext::ai::Voyage4LargeEmbedModel
extending ext::ai::EmbeddingModel
{
alter annotation
ext::ai::model_name := "voyage-4-large";
alter annotation
ext::ai::model_provider := "builtin::voyageai";
alter annotation
ext::ai::embedding_model_max_input_tokens := "32000";
alter annotation
ext::ai::embedding_model_max_batch_tokens := "120000";
alter annotation
ext::ai::embedding_model_max_output_dimensions := "1024";
alter annotation
ext::ai::embedding_model_supports_shortening := "true";
};

create abstract type ext::ai::Voyage3LargeEmbedModel
extending ext::ai::EmbeddingModel
{
alter annotation
ext::ai::model_name := "voyage-3-large";
alter annotation
ext::ai::model_provider := "builtin::voyageai";
alter annotation
ext::ai::embedding_model_max_input_tokens := "32000";
alter annotation
ext::ai::embedding_model_max_batch_tokens := "32000";
alter annotation
ext::ai::embedding_model_max_output_dimensions := "1024";
alter annotation
ext::ai::embedding_model_supports_shortening := "true";
};

create abstract type ext::ai::VoyageCode3EmbedModel
extending ext::ai::EmbeddingModel
{
alter annotation
ext::ai::model_name := "voyage-code-3";
alter annotation
ext::ai::model_provider := "builtin::voyageai";
alter annotation
ext::ai::embedding_model_max_input_tokens := "32000";
alter annotation
ext::ai::embedding_model_max_batch_tokens := "32000";
alter annotation
ext::ai::embedding_model_max_output_dimensions := "1024";
alter annotation
ext::ai::embedding_model_supports_shortening := "true";
};

create abstract type ext::ai::Voyage35EmbedModel
extending ext::ai::EmbeddingModel
{
alter annotation
ext::ai::model_name := "voyage-3.5";
alter annotation
ext::ai::model_provider := "builtin::voyageai";
alter annotation
ext::ai::embedding_model_max_input_tokens := "32000";
alter annotation
ext::ai::embedding_model_max_batch_tokens := "32000";
alter annotation
ext::ai::embedding_model_max_output_dimensions := "1024";
alter annotation
ext::ai::embedding_model_supports_shortening := "true";
};

create abstract type ext::ai::Voyage35LiteEmbedModel
extending ext::ai::EmbeddingModel
{
alter annotation
ext::ai::model_name := "voyage-3.5-lite";
alter annotation
ext::ai::model_provider := "builtin::voyageai";
alter annotation
ext::ai::embedding_model_max_input_tokens := "32000";
alter annotation
ext::ai::embedding_model_max_batch_tokens := "32000";
alter annotation
ext::ai::embedding_model_max_output_dimensions := "1024";
alter annotation
ext::ai::embedding_model_supports_shortening := "true";
};

create abstract type ext::ai::Voyage3EmbedModel
extending ext::ai::EmbeddingModel
{
create annotation std::deprecated :=
"This model is noted as a legacy model in the VoyageAI docs. Consider using voyage-3.5 instead.";
alter annotation
ext::ai::model_name := "voyage-3";
alter annotation
ext::ai::model_provider := "builtin::voyageai";
alter annotation
ext::ai::embedding_model_max_input_tokens := "32000";
alter annotation
ext::ai::embedding_model_max_batch_tokens := "32000";
alter annotation
ext::ai::embedding_model_max_output_dimensions := "1024";
};

create abstract type ext::ai::Voyage3LiteEmbedModel
extending ext::ai::EmbeddingModel
{
create annotation std::deprecated :=
"This model is noted as a legacy model in the VoyageAI docs. Consider using voyage-3.5-lite instead.";
alter annotation
ext::ai::model_name := "voyage-3-lite";
alter annotation
ext::ai::model_provider := "builtin::voyageai";
alter annotation
ext::ai::embedding_model_max_input_tokens := "32000";
alter annotation
ext::ai::embedding_model_max_batch_tokens := "32000";
alter annotation
ext::ai::embedding_model_max_output_dimensions := "512";
};

create abstract type ext::ai::VoyageFinance2EmbedModel
extending ext::ai::EmbeddingModel
{
create annotation std::deprecated :=
"This model is noted as a legacy model in the VoyageAI docs.";
alter annotation
ext::ai::model_name := "voyage-finance-2";
alter annotation
ext::ai::model_provider := "builtin::voyageai";
alter annotation
ext::ai::embedding_model_max_input_tokens := "32000";
alter annotation
ext::ai::embedding_model_max_batch_tokens := "32000";
alter annotation
ext::ai::embedding_model_max_output_dimensions := "1024";
};

create abstract type ext::ai::VoyageLaw2EmbedModel
extending ext::ai::EmbeddingModel
{
create annotation std::deprecated :=
"This model is noted as a legacy model in the VoyageAI docs.";
alter annotation
ext::ai::model_name := "voyage-law-2";
alter annotation
ext::ai::model_provider := "builtin::voyageai";
alter annotation
ext::ai::embedding_model_max_input_tokens := "16000";
alter annotation
ext::ai::embedding_model_max_batch_tokens := "16000";
alter annotation
ext::ai::embedding_model_max_output_dimensions := "1024";
};

create abstract type ext::ai::VoyageCode2EmbedModel
extending ext::ai::EmbeddingModel
{
create annotation std::deprecated :=
"This model is noted as a legacy model in the VoyageAI docs. Consider using voyage-code-3 instead.";
alter annotation
ext::ai::model_name := "voyage-code-2";
alter annotation
ext::ai::model_provider := "builtin::voyageai";
alter annotation
ext::ai::embedding_model_max_input_tokens := "16000";
alter annotation
ext::ai::embedding_model_max_batch_tokens := "16000";
alter annotation
ext::ai::embedding_model_max_output_dimensions := "1536";
};

create abstract type ext::ai::VoyageContext3EmbedModel
extending ext::ai::EmbeddingModel
{
alter annotation
ext::ai::model_name := "voyage-context-3";
alter annotation
ext::ai::model_provider := "builtin::voyageai";
alter annotation
ext::ai::embedding_model_max_input_tokens := "32000";
alter annotation
ext::ai::embedding_model_max_batch_tokens := "320000";
alter annotation
ext::ai::embedding_model_max_output_dimensions := "1024";
alter annotation
ext::ai::embedding_model_supports_shortening := "true";
};

# Ollama embedding models
create abstract type ext::ai::OllamaLlama_3_2_Model
extending ext::ai::TextGenerationModel
Expand Down
Loading