diff --git a/docs/web-tests/py/test_integrations.py b/docs/web-tests/py/test_integrations.py index 577847504..84c4560ae 100644 --- a/docs/web-tests/py/test_integrations.py +++ b/docs/web-tests/py/test_integrations.py @@ -93,7 +93,7 @@ def test_embedding_cohere_usage() -> None: cohere = ( EmbeddingFunctionRegistry.get_instance() .get("cohere") - .create(name="embed-multilingual-v2.0") + .create(name="embed-multilingual-v3.0") ) class TextModel(LanceModel): diff --git a/docs/web/embedding/index.mdx b/docs/web/embedding/index.mdx index 4402feddf..4039ed840 100644 --- a/docs/web/embedding/index.mdx +++ b/docs/web/embedding/index.mdx @@ -181,7 +181,7 @@ LanceDB supports most popular embedding providers. | OpenAI | `openai` | `text-embedding-ada-002` | | Sentence Transformers | `sentence-transformers` | `all-MiniLM-L6-v2` | | Hugging Face | `huggingface` | `colbert-ir/colbertv2.0` | -| Cohere | `cohere` | `embed-english-v3.0` | +| Cohere | `cohere` | `embed-multilingual-v3.0` | | ... | ... | ... | ### Multimodal embedding {#multimodal-embedding} diff --git a/docs/web/integrations/embedding/cohere.mdx b/docs/web/integrations/embedding/cohere.mdx index b9a8e3378..3c56fec76 100644 --- a/docs/web/integrations/embedding/cohere.mdx +++ b/docs/web/integrations/embedding/cohere.mdx @@ -18,16 +18,20 @@ Supported models are: - 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, `embed-multilingual-v2.0`, produced 768-dimensional vectors. +The new default, `embed-multilingual-v3.0`, 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. Supported parameters (to be passed in `create` method) are: | Parameter | Type | Default Value | Description | |---|---|--------|---------| -| `name` | `str` | `"embed-english-v2.0"` | The model ID of the cohere model to use. Supported base models for Text Embeddings: 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 | +| `name` | `str` | `"embed-multilingual-v3.0"` | The model ID of the cohere model to use. Supported base models for Text Embeddings: embed-english-v3.0, embed-multilingual-v3.0, embed-english-light-v3.0, embed-multilingual-light-v3.0 | | `source_input_type` | `str` | `"search_document"` | The type of input data to be used for the source column. | | `query_input_type` | `str` | `"search_query"` | The type of input data to be used for the query. | @@ -52,4 +56,4 @@ Usage Example: {PyEmbeddingCohereUsage} - \ No newline at end of file + diff --git a/docs/web/snippets/integrations.mdx b/docs/web/snippets/integrations.mdx index 67bb654cf..dca2d0c1f 100644 --- a/docs/web/snippets/integrations.mdx +++ b/docs/web/snippets/integrations.mdx @@ -2,7 +2,7 @@ export const PyEmbeddingAwsUsage = "import tempfile\nfrom pathlib import Path\n\nimport lancedb\nimport pandas as pd\nfrom lancedb.embeddings import get_registry\nfrom lancedb.pydantic import LanceModel, Vector\n\nmodel = get_registry().get(\"bedrock-text\").create()\n\nclass TextModel(LanceModel):\n text: str = model.SourceField()\n vector: Vector(model.ndims()) = model.VectorField()\n\ndf = pd.DataFrame({\"text\": [\"hello world\", \"goodbye world\"]})\ndb = lancedb.connect(str(Path(tempfile.mkdtemp()) / \"bedrock-demo\"))\ntbl = db.create_table(\"test\", schema=TextModel, mode=\"overwrite\")\n\ntbl.add(df)\nrs = tbl.search(\"hello\").limit(1).to_pandas()\nprint(rs.head())\n"; -export const PyEmbeddingCohereUsage = "import tempfile\nfrom pathlib import Path\n\nimport lancedb\nfrom lancedb.embeddings import EmbeddingFunctionRegistry\nfrom lancedb.pydantic import LanceModel, Vector\n\ncohere = (\n EmbeddingFunctionRegistry.get_instance()\n .get(\"cohere\")\n .create(name=\"embed-multilingual-v2.0\")\n)\n\nclass TextModel(LanceModel):\n text: str = cohere.SourceField()\n vector: Vector(cohere.ndims()) = cohere.VectorField()\n\ndata = [{\"text\": \"hello world\"}, {\"text\": \"goodbye world\"}]\n\ndb = lancedb.connect(str(Path(tempfile.mkdtemp()) / \"cohere-demo\"))\ntbl = db.create_table(\"test\", schema=TextModel, mode=\"overwrite\")\ntbl.add(data)\n"; +export const PyEmbeddingCohereUsage = "import tempfile\nfrom pathlib import Path\n\nimport lancedb\nfrom lancedb.embeddings import EmbeddingFunctionRegistry\nfrom lancedb.pydantic import LanceModel, Vector\n\ncohere = (\n EmbeddingFunctionRegistry.get_instance()\n .get(\"cohere\")\n .create(name=\"embed-multilingual-v3.0\")\n)\n\nclass TextModel(LanceModel):\n text: str = cohere.SourceField()\n vector: Vector(cohere.ndims()) = cohere.VectorField()\n\ndata = [{\"text\": \"hello world\"}, {\"text\": \"goodbye world\"}]\n\ndb = lancedb.connect(str(Path(tempfile.mkdtemp()) / \"cohere-demo\"))\ntbl = db.create_table(\"test\", schema=TextModel, mode=\"overwrite\")\ntbl.add(data)\n"; export const PyEmbeddingColpaliSetup = "import tempfile\nfrom pathlib import Path\n\nimport lancedb\nimport pandas as pd\nimport requests\nfrom lancedb.embeddings import get_registry\nfrom lancedb.pydantic import LanceModel, MultiVector\n\ndb = lancedb.connect(str(Path(tempfile.mkdtemp()) / \"colpali-demo\"))\nfunc = get_registry().get(\"colpali\").create()\n\nclass Images(LanceModel):\n label: str\n image_uri: str = func.SourceField()\n image_bytes: bytes = func.SourceField()\n vector: MultiVector(func.ndims()) = func.VectorField()\n vec_from_bytes: MultiVector(func.ndims()) = func.VectorField()\n\ntable = db.create_table(\"images\", schema=Images)\nlabels = [\"cat\", \"dog\", \"horse\"]\nuris = [\n \"http://farm1.staticflickr.com/53/167798175_7c7845bbbd_z.jpg\",\n \"http://farm9.staticflickr.com/8387/8602747737_2e5c2a45d4_z.jpg\",\n \"http://farm9.staticflickr.com/8216/8434969557_d37882c42d_z.jpg\",\n]\nimage_bytes = [requests.get(uri).content for uri in uris]\ntable.add(\n pd.DataFrame({\"label\": labels, \"image_uri\": uris, \"image_bytes\": image_bytes})\n)\n"; diff --git a/python/python/lancedb/embeddings/cohere.py b/python/python/lancedb/embeddings/cohere.py index 8fc460f9a..286f658ad 100644 --- a/python/python/lancedb/embeddings/cohere.py +++ b/python/python/lancedb/embeddings/cohere.py @@ -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 diff --git a/python/python/tests/test_embeddings.py b/python/python/tests/test_embeddings.py index 3c968a821..32503c04f 100644 --- a/python/python/tests/test_embeddings.py +++ b/python/python/tests/test_embeddings.py @@ -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 diff --git a/python/python/tests/test_embeddings_slow.py b/python/python/tests/test_embeddings_slow.py index b584598c7..4de85070f 100644 --- a/python/python/tests/test_embeddings_slow.py +++ b/python/python/tests/test_embeddings_slow.py @@ -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):