Skip to content

Commit 2b1391a

Browse files
committed
feat(embedders): default to text-embedding-3-small (5x cheaper than ada-002)
Switches default model for OpenAITextEmbedder, OpenAIDocumentEmbedder, AzureOpenAITextEmbedder, and AzureOpenAIDocumentEmbedder from text-embedding-ada-002 to text-embedding-3-small. text-embedding-3-small is the previous-generation ada-002's successor: ~5x cheaper per token and higher MTEB scores per OpenAI's announcement (https://openai.com/index/new-embedding-models-and-api-updates/). Users can pin the old model explicitly via model= or azure_deployment=.
1 parent 4344c43 commit 2b1391a

9 files changed

Lines changed: 47 additions & 23 deletions

haystack/components/embedders/azure_document_embedder.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ def __init__( # noqa: PLR0913 (too-many-arguments)
4040
self,
4141
azure_endpoint: str | None = None,
4242
api_version: str | None = "2023-05-15",
43-
azure_deployment: str = "text-embedding-ada-002",
43+
azure_deployment: str = "text-embedding-3-small",
4444
dimensions: int | None = None,
4545
api_key: Secret | None = Secret.from_env_var("AZURE_OPENAI_API_KEY", strict=False),
4646
azure_ad_token: Secret | None = Secret.from_env_var("AZURE_OPENAI_AD_TOKEN", strict=False),
@@ -67,7 +67,7 @@ def __init__( # noqa: PLR0913 (too-many-arguments)
6767
:param api_version:
6868
The version of the API to use.
6969
:param azure_deployment:
70-
The name of the model deployed on Azure. The default model is text-embedding-ada-002.
70+
The name of the model deployed on Azure. The default is `text-embedding-3-small`.
7171
:param dimensions:
7272
The number of dimensions of the resulting embeddings. Only supported in text-embedding-3
7373
and later models.

haystack/components/embedders/azure_text_embedder.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def __init__( # noqa: PLR0913
3838
self,
3939
azure_endpoint: str | None = None,
4040
api_version: str | None = "2023-05-15",
41-
azure_deployment: str = "text-embedding-ada-002",
41+
azure_deployment: str = "text-embedding-3-small",
4242
dimensions: int | None = None,
4343
api_key: Secret | None = Secret.from_env_var("AZURE_OPENAI_API_KEY", strict=False),
4444
azure_ad_token: Secret | None = Secret.from_env_var("AZURE_OPENAI_AD_TOKEN", strict=False),
@@ -60,7 +60,7 @@ def __init__( # noqa: PLR0913
6060
:param api_version:
6161
The version of the API to use.
6262
:param azure_deployment:
63-
The name of the model deployed on Azure. The default model is text-embedding-ada-002.
63+
The name of the model deployed on Azure. The default is `text-embedding-3-small`.
6464
:param dimensions:
6565
The number of dimensions the resulting output embeddings should have. Only supported in text-embedding-3
6666
and later models.

haystack/components/embedders/openai_document_embedder.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class OpenAIDocumentEmbedder:
4242
def __init__( # noqa: PLR0913 (too-many-arguments)
4343
self,
4444
api_key: Secret = Secret.from_env_var("OPENAI_API_KEY"),
45-
model: str = "text-embedding-ada-002",
45+
model: str = "text-embedding-3-small",
4646
dimensions: int | None = None,
4747
api_base_url: str | None = None,
4848
organization: str | None = None,
@@ -71,7 +71,7 @@ def __init__( # noqa: PLR0913 (too-many-arguments)
7171
during initialization.
7272
:param model:
7373
The name of the model to use for calculating embeddings.
74-
The default model is `text-embedding-ada-002`.
74+
The default model is `text-embedding-3-small`.
7575
:param dimensions:
7676
The number of dimensions of the resulting embeddings. Only `text-embedding-3` and
7777
later models support this parameter.

haystack/components/embedders/openai_text_embedder.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class OpenAITextEmbedder:
3939
def __init__(
4040
self,
4141
api_key: Secret = Secret.from_env_var("OPENAI_API_KEY"),
42-
model: str = "text-embedding-ada-002",
42+
model: str = "text-embedding-3-small",
4343
dimensions: int | None = None,
4444
api_base_url: str | None = None,
4545
organization: str | None = None,
@@ -62,7 +62,7 @@ def __init__(
6262
during initialization.
6363
:param model:
6464
The name of the model to use for calculating embeddings.
65-
The default model is `text-embedding-ada-002`.
65+
The default model is `text-embedding-3-small`.
6666
:param dimensions:
6767
The number of dimensions of the resulting embeddings. Only `text-embedding-3` and
6868
later models support this parameter.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
---
2+
upgrade:
3+
- |
4+
The default model for ``OpenAITextEmbedder``, ``OpenAIDocumentEmbedder``,
5+
``AzureOpenAITextEmbedder``, and ``AzureOpenAIDocumentEmbedder`` has been changed
6+
from ``text-embedding-ada-002`` to ``text-embedding-3-small``.
7+
8+
``text-embedding-3-small`` is roughly 5x cheaper per token than the previous
9+
generation ``text-embedding-ada-002`` and scores higher on the MTEB benchmark
10+
(see OpenAI's `announcement <https://openai.com/index/new-embedding-models-and-api-updates/>`_).
11+
12+
To preserve previous behavior, pass ``model="text-embedding-ada-002"``
13+
explicitly (or, for the Azure variants,
14+
``azure_deployment="text-embedding-ada-002"``).
15+
16+
Note for Azure users: ``azure_deployment`` refers to the deployment name in
17+
your Azure OpenAI resource, not a model identifier. If you do not already
18+
have a ``text-embedding-3-small`` deployment in Azure, you will need to
19+
create one or pass the name of an existing deployment explicitly.
20+
21+
Embeddings generated with the new default model are not compatible with
22+
embeddings produced by ``text-embedding-ada-002``. If you have a document
23+
store populated with previously-generated embeddings, either keep using
24+
the old model explicitly or re-embed your corpus.

test/components/embedders/test_azure_document_embedder.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ class TestAzureOpenAIDocumentEmbedder:
1818
def test_init_default(self, monkeypatch):
1919
monkeypatch.setenv("AZURE_OPENAI_API_KEY", "fake-api-key")
2020
embedder = AzureOpenAIDocumentEmbedder(azure_endpoint="https://example-resource.azure.openai.com/")
21-
assert embedder.azure_deployment == "text-embedding-ada-002"
22-
assert embedder.model == "text-embedding-ada-002"
21+
assert embedder.azure_deployment == "text-embedding-3-small"
22+
assert embedder.model == "text-embedding-3-small"
2323
assert embedder.dimensions is None
2424
assert embedder.organization is None
2525
assert embedder.prefix == ""
@@ -38,8 +38,8 @@ def test_init_with_0_max_retries(self, monkeypatch):
3838
embedder = AzureOpenAIDocumentEmbedder(
3939
azure_endpoint="https://example-resource.azure.openai.com/", max_retries=0
4040
)
41-
assert embedder.azure_deployment == "text-embedding-ada-002"
42-
assert embedder.model == "text-embedding-ada-002"
41+
assert embedder.azure_deployment == "text-embedding-3-small"
42+
assert embedder.model == "text-embedding-3-small"
4343
assert embedder.dimensions is None
4444
assert embedder.organization is None
4545
assert embedder.prefix == ""
@@ -62,7 +62,7 @@ def test_to_dict(self, monkeypatch):
6262
"api_key": {"env_vars": ["AZURE_OPENAI_API_KEY"], "strict": False, "type": "env_var"},
6363
"azure_ad_token": {"env_vars": ["AZURE_OPENAI_AD_TOKEN"], "strict": False, "type": "env_var"},
6464
"api_version": "2023-05-15",
65-
"azure_deployment": "text-embedding-ada-002",
65+
"azure_deployment": "text-embedding-3-small",
6666
"dimensions": None,
6767
"azure_endpoint": "https://example-resource.azure.openai.com/",
6868
"organization": None,

test/components/embedders/test_azure_text_embedder.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ def test_init_default(self, monkeypatch):
1616
embedder = AzureOpenAITextEmbedder(azure_endpoint="https://example-resource.azure.openai.com/")
1717

1818
assert embedder.client.api_key == "fake-api-key"
19-
assert embedder.azure_deployment == "text-embedding-ada-002"
20-
assert embedder.model == "text-embedding-ada-002"
19+
assert embedder.azure_deployment == "text-embedding-3-small"
20+
assert embedder.model == "text-embedding-3-small"
2121
assert embedder.dimensions is None
2222
assert embedder.organization is None
2323
assert embedder.prefix == ""
@@ -32,8 +32,8 @@ def test_init_with_zero_max_retries(self, monkeypatch):
3232
embedder = AzureOpenAITextEmbedder(azure_endpoint="https://example-resource.azure.openai.com/", max_retries=0)
3333

3434
assert embedder.client.api_key == "fake-api-key"
35-
assert embedder.azure_deployment == "text-embedding-ada-002"
36-
assert embedder.model == "text-embedding-ada-002"
35+
assert embedder.azure_deployment == "text-embedding-3-small"
36+
assert embedder.model == "text-embedding-3-small"
3737
assert embedder.dimensions is None
3838
assert embedder.organization is None
3939
assert embedder.prefix == ""
@@ -51,7 +51,7 @@ def test_to_dict_default(self, monkeypatch):
5151
"init_parameters": {
5252
"api_key": {"env_vars": ["AZURE_OPENAI_API_KEY"], "strict": False, "type": "env_var"},
5353
"azure_ad_token": {"env_vars": ["AZURE_OPENAI_AD_TOKEN"], "strict": False, "type": "env_var"},
54-
"azure_deployment": "text-embedding-ada-002",
54+
"azure_deployment": "text-embedding-3-small",
5555
"dimensions": None,
5656
"organization": None,
5757
"azure_endpoint": "https://example-resource.azure.openai.com/",

test/components/embedders/test_openai_document_embedder.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def test_init_default(self, monkeypatch):
1919
monkeypatch.setenv("OPENAI_API_KEY", "fake-api-key")
2020
embedder = OpenAIDocumentEmbedder()
2121
assert embedder.api_key.resolve_value() == "fake-api-key"
22-
assert embedder.model == "text-embedding-ada-002"
22+
assert embedder.model == "text-embedding-3-small"
2323
assert embedder.organization is None
2424
assert embedder.prefix == ""
2525
assert embedder.suffix == ""
@@ -98,7 +98,7 @@ def test_to_dict(self, monkeypatch):
9898
"init_parameters": {
9999
"api_key": {"env_vars": ["OPENAI_API_KEY"], "strict": True, "type": "env_var"},
100100
"api_base_url": None,
101-
"model": "text-embedding-ada-002",
101+
"model": "text-embedding-3-small",
102102
"dimensions": None,
103103
"organization": None,
104104
"http_client_kwargs": None,

test/components/embedders/test_openai_text_embedder.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def test_init_default(self, monkeypatch):
1818
embedder = OpenAITextEmbedder()
1919

2020
assert embedder.client.api_key == "fake-api-key"
21-
assert embedder.model == "text-embedding-ada-002"
21+
assert embedder.model == "text-embedding-3-small"
2222
assert embedder.api_base_url is None
2323
assert embedder.organization is None
2424
assert embedder.prefix == ""
@@ -83,7 +83,7 @@ def test_to_dict(self, monkeypatch):
8383
"api_key": {"env_vars": ["OPENAI_API_KEY"], "strict": True, "type": "env_var"},
8484
"api_base_url": None,
8585
"dimensions": None,
86-
"model": "text-embedding-ada-002",
86+
"model": "text-embedding-3-small",
8787
"organization": None,
8888
"http_client_kwargs": None,
8989
"prefix": "",
@@ -153,7 +153,7 @@ def test_prepare_input(self, monkeypatch):
153153
inp = "The food was delicious"
154154
prepared_input = embedder._prepare_input(inp)
155155
assert prepared_input == {
156-
"model": "text-embedding-ada-002",
156+
"model": "text-embedding-3-small",
157157
"input": "The food was delicious",
158158
"encoding_format": "float",
159159
"dimensions": 1536,

0 commit comments

Comments
 (0)