fix(embeddings): default Cohere to embed-multilingual-v3.0, the v2.0 models are retired (#4698)

Cohere retired `embed-english-v2.0`, `embed-english-light-v2.0` and
`embed-multilingual-v2.0` on April 4, 2026
([deprecations](https://docs.cohere.com/docs/deprecations), which lists
`embed-english-v3.0`, `embed-multilingual-v3.0` and `embed-v4.0` as the
embedding alternatives). `CohereEmbeddingFunction` still defaulted to
`embed-multilingual-v2.0`, so every call without an explicit `name`
fails.

The default is now `embed-multilingual-v3.0`, the multilingual v3 model,
and the retired models are removed from the docstring and the Cohere
integration page (the page also listed `embed-english-v2.0` as the
default, which did not match the code). The docs example, its generated
snippet, the docs test and the slow Cohere test use the new name.

This changes the default vector size: `ndims()` returns 1024 for
`embed-multilingual-v3.0`, where the old default gave 768. Tables
created from a schema that uses `cohere.ndims()` get 1024-dimension
vectors from now on. A table that already holds 768-dimension vectors
from the retired model needs a re-embed with a current model, since the
old model can no longer be called. The `ndims()` entries for the v2
names are left as they are.

Test: `test_cohere_default_model_is_not_a_retired_v2_model` in
`python/python/tests/test_embeddings.py` checks the default name and
that `ndims()` is 1024. The repository's pytest session could not be run
for this change (its `conftest.py` needs a newer native module than the
released wheel); the body of that test was run against the released
`lancedb` 0.40.0 with this version of `cohere.py` in place, where it
passes, and it returns `embed-multilingual-v2.0` / 768 without the
change. ruff check and format are clean on the touched Python files. No
Cohere request was made.

This change was made with Claude Code.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-authored-by: Xuanwo <github@xuanwo.io>
This commit is contained in:
alexcastgonz
2026-10-29 00:16:28 +08:00
committed by GitHub
co-authored by Claude Sonnet 5.5 Xuanwo
parent 4359688f32
commit 659ea11ac4
7 changed files with 33 additions and 15 deletions
+10 -6
View File
@@ -22,16 +22,20 @@ class CohereEmbeddingFunction(TextEmbeddingFunction):
Parameters
----------
name : str, default "embed-multilingual-v2.0"
name : str, default "embed-multilingual-v3.0"
The name of the model to use. List of acceptable models:
* embed-english-v3.0
* embed-multilingual-v3.0
* embed-english-light-v3.0
* embed-multilingual-light-v3.0
* embed-english-v2.0
* embed-english-light-v2.0
* embed-multilingual-v2.0
The v2.0 models (embed-english-v2.0, embed-english-light-v2.0 and
embed-multilingual-v2.0) were retired by Cohere on April 4, 2026.
The previous default produced 768-dimensional vectors, while the new
default produces 1024-dimensional vectors. Existing tables containing
vectors from a v2.0 model must be re-embedded with an active model into
a table whose vector column has the matching dimension.
source_input_type : str, default "search_document"
The input type for the source column in the database
@@ -65,7 +69,7 @@ class CohereEmbeddingFunction(TextEmbeddingFunction):
cohere = EmbeddingFunctionRegistry
.get_instance()
.get("cohere")
.create(name="embed-multilingual-v2.0")
.create(name="embed-multilingual-v3.0")
class TextModel(LanceModel):
text: str = cohere.SourceField()
@@ -81,7 +85,7 @@ class CohereEmbeddingFunction(TextEmbeddingFunction):
"""
name: str = "embed-multilingual-v2.0"
name: str = "embed-multilingual-v3.0"
source_input_type: str = "search_document"
query_input_type: str = "search_query"
client: ClassVar = None
+10
View File
@@ -1115,3 +1115,13 @@ def test_jina_embeddings_use_their_own_api_key(monkeypatch):
func_b.compute_source_embeddings(["hello"])
assert sent == ["Bearer key-a", "Bearer key-b"]
def test_cohere_default_model_is_not_a_retired_v2_model():
# Cohere retired embed-english-v2.0, embed-english-light-v2.0 and
# embed-multilingual-v2.0 on April 4, 2026.
cohere = get_registry().get("cohere").create()
assert cohere.name == "embed-multilingual-v3.0"
assert "v2.0" not in cohere.name
assert cohere.ndims() == 1024
+1 -1
View File
@@ -272,7 +272,7 @@ def test_cohere_embedding_function():
cohere = (
get_registry()
.get("cohere")
.create(name="embed-multilingual-v2.0", max_retries=0)
.create(name="embed-multilingual-v3.0", max_retries=0)
)
class TextModel(LanceModel):