mirror of
https://github.com/discourse/discourse-ai.git
synced 2025-06-28 18:42:16 +00:00
FIX: Open AI embedding shortening is only available for some models (#1080)
This commit is contained in:
parent
3b66fb3e87
commit
a5e5ae72a8
@ -73,6 +73,8 @@ class EmbeddingDefinition < ActiveRecord::Base
|
|||||||
tokenizer_class: "DiscourseAi::Tokenizer::MultilingualE5LargeTokenizer",
|
tokenizer_class: "DiscourseAi::Tokenizer::MultilingualE5LargeTokenizer",
|
||||||
provider: HUGGING_FACE,
|
provider: HUGGING_FACE,
|
||||||
},
|
},
|
||||||
|
# "text-embedding-3-large" real dimentions are 3072, but we only support up to 2000 in the
|
||||||
|
# indexes, so we downsample to 2000 via API.
|
||||||
{
|
{
|
||||||
preset_id: "text-embedding-3-large",
|
preset_id: "text-embedding-3-large",
|
||||||
display_name: "OpenAI's text-embedding-3-large",
|
display_name: "OpenAI's text-embedding-3-large",
|
||||||
@ -198,11 +200,15 @@ class EmbeddingDefinition < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def open_ai_client
|
def open_ai_client
|
||||||
|
model_name = lookup_custom_param("model_name")
|
||||||
|
can_shorten_dimensions = %w[text-embedding-3-small text-embedding-3-large].include?(model_name)
|
||||||
|
client_dimensions = can_shorten_dimensions ? dimensions : nil
|
||||||
|
|
||||||
DiscourseAi::Inference::OpenAiEmbeddings.new(
|
DiscourseAi::Inference::OpenAiEmbeddings.new(
|
||||||
endpoint_url,
|
endpoint_url,
|
||||||
api_key,
|
api_key,
|
||||||
lookup_custom_param("model_name"),
|
lookup_custom_param("model_name"),
|
||||||
dimensions,
|
client_dimensions,
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -94,13 +94,35 @@ RSpec.describe DiscourseAi::Embeddings::Vector do
|
|||||||
vdef.lookup_custom_param("model_name"),
|
vdef.lookup_custom_param("model_name"),
|
||||||
text,
|
text,
|
||||||
expected_embedding,
|
expected_embedding,
|
||||||
extra_args: {
|
|
||||||
dimensions: vdef.dimensions,
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
it_behaves_like "generates and store embeddings using a vector definition"
|
it_behaves_like "generates and store embeddings using a vector definition"
|
||||||
|
|
||||||
|
context "when working with models that support shortening embeddings" do
|
||||||
|
it "passes the dimensions param" do
|
||||||
|
shorter_dimensions = 10
|
||||||
|
vdef.update!(
|
||||||
|
dimensions: shorter_dimensions,
|
||||||
|
provider_params: {
|
||||||
|
model_name: "text-embedding-3-small",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
text = "This is a piece of text"
|
||||||
|
short_expected_embedding = [0.0038493] * shorter_dimensions
|
||||||
|
|
||||||
|
EmbeddingsGenerationStubs.openai_service(
|
||||||
|
vdef.lookup_custom_param("model_name"),
|
||||||
|
text,
|
||||||
|
short_expected_embedding,
|
||||||
|
extra_args: {
|
||||||
|
dimensions: shorter_dimensions,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
expect(described_class.new(vdef).vector_from(text)).to eq(short_expected_embedding)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "with hugging_face as the provider" do
|
context "with hugging_face as the provider" do
|
||||||
|
@ -38,9 +38,6 @@ describe DiscourseAi::Embeddings::EmbeddingsController do
|
|||||||
vector_def.lookup_custom_param("model_name"),
|
vector_def.lookup_custom_param("model_name"),
|
||||||
query,
|
query,
|
||||||
embedding,
|
embedding,
|
||||||
extra_args: {
|
|
||||||
dimensions: vector_def.dimensions,
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user