"""embedContent / batchEmbedContents on gemini-embedding-001 and gemini-embedding-2. Verified 2026-09-18 (≈ free).""" from __future__ import annotations from tests.gemini._core_helpers import call E1, E2 = "gemini-embedding-001", "gemini-embedding-2" def test_embed_001_task_type_and_dims(gemini): st, r, _ = call(gemini, "POST", f"/v1beta/models/{E1}:embedContent", {"content": {"parts": [{"text": "Hello world"}]}, "taskType": "SEMANTIC_SIMILARITY", "outputDimensionality": 64}, note="test_embeddings 001 dims 64") assert st == 200, r assert len(r["embedding"]["values"]) == 64 and "usageMetadata" not in r assert all(isinstance(v, float) for v in r["embedding"]["values"]) def test_embed_2_usage_and_config(gemini): st, r, _ = call(gemini, "POST", f"/v1beta/models/{E2}:embedContent", {"content": {"parts": [{"text": "task: classification | query: Hello world"}]}, "embedContentConfig": {"outputDimensionality": 64}}, note="test_embeddings 2 dims 64") assert st == 200, r assert len(r["embedding"]["values"]) == 64 assert r["usageMetadata"]["promptTokenCount"] > 0 and r["usageMetadata"]["promptTokenDetails"][0]["modality"] == "TEXT" def test_batch_embed_and_model_required(gemini): st, r, _ = call(gemini, "POST", f"/v1beta/models/{E1}:batchEmbedContents", {"requests": [{"model": f"models/{E1}", "content": {"parts": [{"text": "Hello"}]}, "outputDimensionality": 64}, {"model": f"models/{E1}", "content": {"parts": [{"text": "World"}]}, "outputDimensionality": 64}]}, note="test_embeddings batch") assert st == 200 and [len(e["values"]) for e in r["embeddings"]] == [64, 64] st, r, _ = call(gemini, "POST", f"/v1beta/models/{E1}:batchEmbedContents", {"requests": [{"content": {"parts": [{"text": "Hello"}]}}]}, note="test_embeddings batch no model") assert st == 400 and "model is not specified" in r["error"]["message"] def test_bad_dimensionality_and_wrong_model(gemini, models): st, r, _ = call(gemini, "POST", f"/v1beta/models/{E1}:embedContent", {"content": {"parts": [{"text": "Hello"}]}, "outputDimensionality": 4096}, note="test_embeddings dims 4096") assert st == 400 and "outputDimensionality" in r["error"]["message"] st, r, _ = call(gemini, "POST", f"/v1beta/models/{models['gemini']}:embedContent", {"content": {"parts": [{"text": "Hello"}]}}, note="test_embeddings generation model") assert st == 404 and "not supported for embedContent" in r["error"]["message"]