Skip to content
This repository was archived by the owner on Jul 22, 2025. It is now read-only.

Commit a5e5ae7

Browse files
authored
FIX: Open AI embedding shortening is only available for some models (#1080)
1 parent 3b66fb3 commit a5e5ae7

File tree

3 files changed

+32
-7
lines changed

3 files changed

+32
-7
lines changed

app/models/embedding_definition.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ def presets
7373
tokenizer_class: "DiscourseAi::Tokenizer::MultilingualE5LargeTokenizer",
7474
provider: HUGGING_FACE,
7575
},
76+
# "text-embedding-3-large" real dimentions are 3072, but we only support up to 2000 in the
77+
# indexes, so we downsample to 2000 via API.
7678
{
7779
preset_id: "text-embedding-3-large",
7880
display_name: "OpenAI's text-embedding-3-large",
@@ -198,11 +200,15 @@ def hugging_face_client
198200
end
199201

200202
def open_ai_client
203+
model_name = lookup_custom_param("model_name")
204+
can_shorten_dimensions = %w[text-embedding-3-small text-embedding-3-large].include?(model_name)
205+
client_dimensions = can_shorten_dimensions ? dimensions : nil
206+
201207
DiscourseAi::Inference::OpenAiEmbeddings.new(
202208
endpoint_url,
203209
api_key,
204210
lookup_custom_param("model_name"),
205-
dimensions,
211+
client_dimensions,
206212
)
207213
end
208214

spec/lib/modules/embeddings/vector_spec.rb

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,13 +94,35 @@ def stub_vector_mapping(text, expected_embedding)
9494
vdef.lookup_custom_param("model_name"),
9595
text,
9696
expected_embedding,
97-
extra_args: {
98-
dimensions: vdef.dimensions,
99-
},
10097
)
10198
end
10299

103100
it_behaves_like "generates and store embeddings using a vector definition"
101+
102+
context "when working with models that support shortening embeddings" do
103+
it "passes the dimensions param" do
104+
shorter_dimensions = 10
105+
vdef.update!(
106+
dimensions: shorter_dimensions,
107+
provider_params: {
108+
model_name: "text-embedding-3-small",
109+
},
110+
)
111+
text = "This is a piece of text"
112+
short_expected_embedding = [0.0038493] * shorter_dimensions
113+
114+
EmbeddingsGenerationStubs.openai_service(
115+
vdef.lookup_custom_param("model_name"),
116+
text,
117+
short_expected_embedding,
118+
extra_args: {
119+
dimensions: shorter_dimensions,
120+
},
121+
)
122+
123+
expect(described_class.new(vdef).vector_from(text)).to eq(short_expected_embedding)
124+
end
125+
end
104126
end
105127

106128
context "with hugging_face as the provider" do

spec/requests/embeddings/embeddings_controller_spec.rb

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,6 @@ def stub_embedding(query)
3838
vector_def.lookup_custom_param("model_name"),
3939
query,
4040
embedding,
41-
extra_args: {
42-
dimensions: vector_def.dimensions,
43-
},
4441
)
4542
end
4643

0 commit comments

Comments
 (0)