{
  "aboutHtml": "<p>Gemini Embedding 2 Preview is Google’s named preview edition of its native multimodal embedding family. It maps text, images, video, audio and PDF into a shared numerical space, with semantic intent represented across more than 100 languages. The output is embeddings: vectors used to compare and retrieve related material. This preview identity remains separate from the stable Gemini Embedding 2 edition and does not imply interchangeable weights or an identical vector space.</p><p>The original announcement describes cross-modal search, classification, clustering, sentiment analysis and retrieval-augmented generation as downstream applications. A text query can find a related visual item, while an image or clip can also act as a search source. An application stores the representations, compares them and returns the corresponding records; a separate language model can use the retrieved source material to draft an answer. The embedding itself does not contain a natural-language explanation or transcript.</p><p>Its own model page documents an 8,192-token input limit and output dimensions from 128 to 3,072, with 768, 1,536 and 3,072 recommended sizes. The preview announcement gives a default of 3,072 and describes Matryoshka Representation Learning, which keeps useful information in shorter prefixes of the representation. Keep one chosen dimension for vectors that must be compared and retain the model edition with the collection, rather than merging representations simply because their lengths match.</p><p>The preview announcement documents up to six PNG or JPEG images per request, up to 120 seconds of MP4 or MOV video and PDF documents up to six pages. It also documents direct audio embedding without an intermediate text transcription. These specifications come from the preview’s own announcement, not from the later stable guide. The announcement does not establish every current audio-duration, codec or frame-sampling limit for this exact preview profile.</p><p>Interleaved multimodal input lets the representation reflect relationships between media, such as a picture and its caption. For a product catalogue, supply the photograph and approved description together when they describe one retrievable object. For a document collection, divide the source into focused passages or pages and preserve its title and position. For a media library, select a clip corresponding to the event users should find and keep its original time range with the stored record.</p><p>A useful retrieval task makes the intended relationship clear. A question seeking an explanation, a search for visually similar items and clustering by topic are different tasks even when they use the same source collection. Prepare the content consistently, record the edition and dimension and keep every vector linked to its source. Similarity supplies candidates for the application to inspect; it is not proof that two records state the same fact or that a retrieved source fully answers a question.</p><p>For a practical media search, represent the chosen image or video excerpt and compare it with the description of the desired content. Present the matching source alongside its caption or time range so a user can review it. For a knowledge assistant, retrieve the relevant page or passage before generating the written response. The Preview model’s role is the multimodal numerical representation that supports those selection steps, while storage, ranking rules and the final answer remain parts of the surrounding workflow.</p>",
  "aboutText": "Gemini Embedding 2 Preview is Google’s named preview edition of its native multimodal embedding family. It maps text, images, video, audio and PDF into a shared numerical space, with semantic intent represented across more than 100 languages. The output is embeddings: vectors used to compare and retrieve related material. This preview identity remains separate from the stable Gemini Embedding 2 edition and does not imply interchangeable weights or an identical vector space.\n\nThe original announcement describes cross-modal search, classification, clustering, sentiment analysis and retrieval-augmented generation as downstream applications. A text query can find a related visual item, while an image or clip can also act as a search source. An application stores the representations, compares them and returns the corresponding records; a separate language model can use the retrieved source material to draft an answer. The embedding itself does not contain a natural-language explanation or transcript.\n\nIts own model page documents an 8,192-token input limit and output dimensions from 128 to 3,072, with 768, 1,536 and 3,072 recommended sizes. The preview announcement gives a default of 3,072 and describes Matryoshka Representation Learning, which keeps useful information in shorter prefixes of the representation. Keep one chosen dimension for vectors that must be compared and retain the model edition with the collection, rather than merging representations simply because their lengths match.\n\nThe preview announcement documents up to six PNG or JPEG images per request, up to 120 seconds of MP4 or MOV video and PDF documents up to six pages. It also documents direct audio embedding without an intermediate text transcription. These specifications come from the preview’s own announcement, not from the later stable guide. The announcement does not establish every current audio-duration, codec or frame-sampling limit for this exact preview profile.\n\nInterleaved multimodal input lets the representation reflect relationships between media, such as a picture and its caption. For a product catalogue, supply the photograph and approved description together when they describe one retrievable object. For a document collection, divide the source into focused passages or pages and preserve its title and position. For a media library, select a clip corresponding to the event users should find and keep its original time range with the stored record.\n\nA useful retrieval task makes the intended relationship clear. A question seeking an explanation, a search for visually similar items and clustering by topic are different tasks even when they use the same source collection. Prepare the content consistently, record the edition and dimension and keep every vector linked to its source. Similarity supplies candidates for the application to inspect; it is not proof that two records state the same fact or that a retrieved source fully answers a question.\n\nFor a practical media search, represent the chosen image or video excerpt and compare it with the description of the desired content. Present the matching source alongside its caption or time range so a user can review it. For a knowledge assistant, retrieve the relevant page or passage before generating the written response. The Preview model’s role is the multimodal numerical representation that supports those selection steps, while storage, ranking rules and the final answer remain parts of the surrounding workflow.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "732a30ba9401d1ef2c2589bdfd704ba8fbb07bbb42215cd21049a010f90d8b3a",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "en",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">G</span><h2 id=\"sheet-title\">Google: Gemini Embedding 2 Preview</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Close\">×</button></div><div class=\"idline\"><span>Google /</span><code>google/gemini-embedding-2-preview</code><button type=\"button\" id=\"copy-id\">Copy ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Model card sections\"><button type=\"button\" data-card-jump=\"overview\">Overview</button><button type=\"button\" data-card-jump=\"methods\">Inputs &amp; methods</button><button type=\"button\" data-card-jump=\"pricing\">Pricing</button><button type=\"button\" data-card-jump=\"examples\">Examples</button><button type=\"button\" data-card-jump=\"results\">Results</button><button type=\"button\" data-card-jump=\"aliases\">Aliases</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API methods\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|embeddings|/v1/embeddings|google%2Fgemini-embedding-2-preview\">Embeddings</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Overview</h3><p class=\"mdesc-full\">Gemini Embedding 2 Preview converts text, images, audio, video and PDF into numerical vectors in one multimodal space. Its separately documented preview profile supports cross-modal retrieval and comparison, an 8,192-token input and flexible vector dimensions.</p><dl class=\"card-io\" data-card-io><div><dt>Accepted inputs</dt><dd>Text</dd></div><div><dt>Results</dt><dd>embedding</dd></div></dl><details class=\"card-about\"><summary>About the model</summary><p class=\"note-s\" data-model-method-boundary>This description covers the model’s capabilities. Available in Ailoot inputs, outputs and options are listed for the selected method below.</p><div class=\"mabout\" id=\"m-about\"><p>Gemini Embedding 2 Preview is Google’s named preview edition of its native multimodal embedding family. It maps text, images, video, audio and PDF into a shared numerical space, with semantic intent represented across more than 100 languages. The output is embeddings: vectors used to compare and retrieve related material. This preview identity remains separate from the stable Gemini Embedding 2 edition and does not imply interchangeable weights or an identical vector space.</p><p>The original announcement describes cross-modal search, classification, clustering, sentiment analysis and retrieval-augmented generation as downstream applications. A text query can find a related visual item, while an image or clip can also act as a search source. An application stores the representations, compares them and returns the corresponding records; a separate language model can use the retrieved source material to draft an answer. The embedding itself does not contain a natural-language explanation or transcript.</p><p>Its own model page documents an 8,192-token input limit and output dimensions from 128 to 3,072, with 768, 1,536 and 3,072 recommended sizes. The preview announcement gives a default of 3,072 and describes Matryoshka Representation Learning, which keeps useful information in shorter prefixes of the representation. Keep one chosen dimension for vectors that must be compared and retain the model edition with the collection, rather than merging representations simply because their lengths match.</p><p>The preview announcement documents up to six PNG or JPEG images per request, up to 120 seconds of MP4 or MOV video and PDF documents up to six pages. It also documents direct audio embedding without an intermediate text transcription. These specifications come from the preview’s own announcement, not from the later stable guide. The announcement does not establish every current audio-duration, codec or frame-sampling limit for this exact preview profile.</p><p>Interleaved multimodal input lets the representation reflect relationships between media, such as a picture and its caption. For a product catalogue, supply the photograph and approved description together when they describe one retrievable object. For a document collection, divide the source into focused passages or pages and preserve its title and position. For a media library, select a clip corresponding to the event users should find and keep its original time range with the stored record.</p><p>A useful retrieval task makes the intended relationship clear. A question seeking an explanation, a search for visually similar items and clustering by topic are different tasks even when they use the same source collection. Prepare the content consistently, record the edition and dimension and keep every vector linked to its source. Similarity supplies candidates for the application to inspect; it is not proof that two records state the same fact or that a retrieved source fully answers a question.</p><p>For a practical media search, represent the chosen image or video excerpt and compare it with the description of the desired content. Present the matching source alongside its caption or time range so a user can review it. For a knowledge assistant, retrieve the relevant page or passage before generating the written response. The Preview model’s role is the multimodal numerical representation that supports those selection steps, while storage, ranking rules and the final answer remain parts of the surrounding workflow.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Available in Ailoot · inputs &amp; methods</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Embeddings</b> <code>POST /v1/embeddings</code></summary><dl class=\"method-capabilities\"><div><dt>Input types</dt><dd><code>text</code></dd></div><div><dt>Output types</dt><dd><code>embedding</code></dd></div><div><dt>Context</dt><dd>8,192 tokens</dd></div><div><dt>Output format</dt><dd>json</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Field</th><th>Type</th><th>Requirement</th><th>Values &amp; limits</th><th>Default</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Field\" scope=\"row\"><span class=\"card-cell-label\">Field</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Requirement\"><span class=\"card-cell-label\">Requirement</span>Required</td><td data-cell-label=\"Values &amp; limits\"><span class=\"card-cell-label\">Values &amp; limits</span><div>google/gemini-embedding-2-preview</div></td><td data-cell-label=\"Default\" data-default=\"unspecified\"><span class=\"card-cell-label\">Default</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Field\" scope=\"row\"><span class=\"card-cell-label\">Field</span><code class=\"card-field-name\">input</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string|string[]</code></td><td data-cell-label=\"Requirement\"><span class=\"card-cell-label\">Requirement</span>Required</td><td data-cell-label=\"Values &amp; limits\"><span class=\"card-cell-label\">Values &amp; limits</span></td><td data-cell-label=\"Default\" data-default=\"unspecified\"><span class=\"card-cell-label\">Default</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Input material combinations</summary><p class=\"note-s\"><b>text_to_embedding</b></p></details><details class=\"note-s\" data-method-contract><summary>Method parameters and lifecycle</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Contract</th></tr></thead><tbody><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>content_type</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>application/json</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>required</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>model, input</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>input_shapes</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>string, string[]</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_types</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>text</td></tr></tbody></table></div><p>Lifecycle: <code>synchronous_json</code></p><p class=\"note-s\">Keep every returned vector and index.</p><p class=\"note-s\">No image/audio/file-object support is inferred from this minimal text profile.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Pricing</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Tariff references do not add request options. Supported parameters are listed for the selected method.</p><dl data-price-conditions><dt>Fast mode</dt><dd>Not specified <span class=\"note-s\">When fast mode is selected</span></dd><dt>Flex mode</dt><dd>Not specified <span class=\"note-s\">When flex mode is selected</span></dd><dt>Maximum reasoning effort</dt><dd>Not specified <span class=\"note-s\">When maximum reasoning effort uses the default adjustment</span></dd></dl></div><div data-declared-tariff-pricing><h4>Ailoot rates</h4><h4>Prices by configuration</h4><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Configuration</th><th>Rate schedule</th><th>Charge</th></tr></thead><tbody><tr><th data-cell-label=\"Configuration\" scope=\"row\"><span class=\"card-cell-label\">Configuration</span>Base token rates</th><td data-cell-label=\"Rate schedule\"><span class=\"card-cell-label\">Rate schedule</span>Base rate</td><td data-cell-label=\"Charge\"><span class=\"card-cell-label\">Charge</span><div><span>Input · Input tokens</span> <b>$0.0004</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Output · Output tokens</span> <b>$0</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Input · Cache read</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Input · Cache write</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Input · Cache write, 1 hour</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot reserves an estimated amount before a request. After the result, it settles the final charge from measured usage. Streaming settlement uses the final usage record. <a href=\"/docs/en/billing/reserve/\">How reservation and settlement work →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Example requests</h3><h4>Ailoot Ultra · Embeddings</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Code options\"><button class=\"cg-tab\" id=\"model-code-1488-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1488-panel-0\" aria-selected=\"true\" tabindex=\"0\">Complete minimal JSON body</button><button class=\"cg-tab\" id=\"model-code-1488-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1488-panel-1\" aria-selected=\"false\" tabindex=\"-1\">curl · minimal text embeddings</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copy code\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1488-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1488-tab-0\"><pre data-lang=\"json\"><code>{\n  &quot;model&quot;: &quot;google/gemini-embedding-2-preview&quot;,\n  &quot;input&quot;: [\n    &quot;First document&quot;,\n    &quot;Second document&quot;\n  ]\n}</code></pre></div><div class=\"cg-pane\" id=\"model-code-1488-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-1488-tab-1\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\ncat &gt; embedding-request.json &lt;&lt;&#39;JSON_REQUEST&#39;\n{\n  &quot;model&quot;: &quot;google/gemini-embedding-2-preview&quot;,\n  &quot;input&quot;: [\n    &quot;First document&quot;,\n    &quot;Second document&quot;\n  ]\n}\nJSON_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/embeddings \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @embedding-request.json -o embedding-response.json\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Receive and save results</h3><h4>Ailoot Ultra · Embeddings</h4><p class=\"note-s\">json</p><div class=\"card-result-process\" data-all-results><h5>Keep all completed results</h5><p class=\"note-s\">Keep every complete returned response, file and content part.</p><p class=\"note-s\">Keep every vector with its index. Vector count must equal input count; dimensions must be consistent.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>If the original response needs checking</h5><p class=\"note-s\">No embedding job endpoint is introduced.</p></div><details class=\"card-about\" data-output-fields><summary>Response fields</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Field</th><th>Type</th></tr></thead><tbody><tr><th data-cell-label=\"Field\" scope=\"row\"><span class=\"card-cell-label\">Field</span><code class=\"card-field-name\">object</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string</td></tr><tr><th data-cell-label=\"Field\" scope=\"row\"><span class=\"card-cell-label\">Field</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string</td></tr><tr><th data-cell-label=\"Field\" scope=\"row\"><span class=\"card-cell-label\">Field</span><code class=\"card-field-name\">data[].index</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>integer</td></tr><tr><th data-cell-label=\"Field\" scope=\"row\"><span class=\"card-cell-label\">Field</span><code class=\"card-field-name\">data[].embedding</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>finite float[]</td></tr><tr><th data-cell-label=\"Field\" scope=\"row\"><span class=\"card-cell-label\">Field</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>object</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Errors and next steps</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Response</th><th>Condition</th><th>Next step</th></tr></thead><tbody><tr><th data-cell-label=\"Response\" scope=\"row\"><span class=\"card-cell-label\">Response</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>Missing model or malformed JSON.</td><td data-cell-label=\"Next step\"><span class=\"card-cell-label\">Next step</span>Correct indicated fields.</td></tr><tr><th data-cell-label=\"Response\" scope=\"row\"><span class=\"card-cell-label\">Response</span>413 · <code>invalid_request_error</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>Configured body limit exceeded.</td><td data-cell-label=\"Next step\"><span class=\"card-cell-label\">Next step</span>Reduce actual material.</td></tr><tr><th data-cell-label=\"Response\" scope=\"row\"><span class=\"card-cell-label\">Response</span>422 · <code>invalid_request_error</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>Input or controls violate current dedicated policy.</td><td data-cell-label=\"Next step\"><span class=\"card-cell-label\">Next step</span>Use shown minimal text input without inherited controls.</td></tr><tr><th data-cell-label=\"Response\" scope=\"row\"><span class=\"card-cell-label\">Response</span>503 · <code>billing_error</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>Admission or quote cannot be bound.</td><td data-cell-label=\"Next step\"><span class=\"card-cell-label\">Next step</span>Preserve response; do not substitute a policy.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliases</h3><h4>Model aliases</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=google%2Fgemini-embedding-2-preview&amp;route=Ultra&amp;caller=google%2Fgemini-embedding-2-preview&amp;fmt=embeddings\"><code>google/gemini-embedding-2-preview</code></a></span></p><h4>Method path aliases</h4><p class=\"note-s\">Use the method paths shown above.</p><h4>Related caller IDs</h4><p class=\"note-s\"><a href=\"#m=google%2Fgemini-embedding-2-preview&amp;route=Ultra&amp;caller=google%2Fgemini-embedding-2-preview&amp;fmt=embeddings\"><code>google/gemini-embedding-2-preview</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "google/gemini-embedding-2-preview",
        "fmt": "embeddings",
        "http": "POST",
        "path": "/v1/embeddings",
        "request_model_id": "google/gemini-embedding-2-preview",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|embeddings|/v1/embeddings|google%2Fgemini-embedding-2-preview",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Keep every vector with its index. Vector count must equal input count; dimensions must be consistent.",
            "errors": [
              {
                "code": null,
                "condition": "Missing model or malformed JSON.",
                "http_status": 400,
                "recovery": "Correct indicated fields.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Configured body limit exceeded.",
                "http_status": 413,
                "recovery": "Reduce actual material.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Input or controls violate current dedicated policy.",
                "http_status": 422,
                "recovery": "Use shown minimal text input without inherited controls.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Admission or quote cannot be bound.",
                "http_status": 503,
                "recovery": "Preserve response; do not substitute a policy.",
                "type": "billing_error"
              }
            ],
            "example_body": {
              "input": [
                "First document",
                "Second document"
              ],
              "model": "google/gemini-embedding-2-preview"
            },
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "create": {
                "http": "POST",
                "path": "/v1/embeddings"
              },
              "job_read": null,
              "mode": "synchronous_json",
              "unknown": "No embedding job endpoint is introduced."
            },
            "material_combinations": [
              {
                "alternatives": [
                  "string",
                  "string[]"
                ],
                "mode": "text_to_embedding"
              }
            ],
            "operation_modes": [
              "single_embedding",
              "batched_embeddings"
            ],
            "outputs": {
              "all_results": "Keep every vector with its index. Vector count must equal input count; dimensions must be consistent.",
              "default_dimensions": null,
              "family": "embedding",
              "fields": [
                {
                  "description": null,
                  "name": "object",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "model",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "data[].index",
                  "type": "integer"
                },
                {
                  "description": null,
                  "name": "data[].embedding",
                  "type": "finite float[]"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "json"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "google/gemini-embedding-2-preview"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "input",
                "required": true,
                "type": "string|string[]"
              }
            ],
            "profile_binding": "Minimal current Source subset: only model and text input. Optional controls and another model dimensions/token limits are not inherited.",
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "input": {
                  "oneOf": [
                    {
                      "minLength": 1,
                      "type": "string"
                    },
                    {
                      "items": {
                        "minLength": 1,
                        "type": "string"
                      },
                      "minItems": 1,
                      "type": "array"
                    }
                  ]
                },
                "model": {
                  "enum": [
                    "google/gemini-embedding-2-preview"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input"
              ],
              "type": "object"
            },
            "schema_template": {
              "input": [
                "First document",
                "Second document"
              ],
              "model": "google/gemini-embedding-2-preview"
            },
            "unsupported": [
              "image/audio/file objects in this minimal text profile",
              "dimensions (current Native43 supports_dimensions:false)",
              "foreign model-specific dimensions or token limits"
            ]
          },
          "hints": [
            "Keep every returned vector and index.",
            "No image/audio/file-object support is inferred from this minimal text profile."
          ],
          "input": {
            "content_type": "application/json",
            "input_shapes": [
              "string",
              "string[]"
            ],
            "material_types": [
              "text"
            ],
            "required": [
              "model",
              "input"
            ]
          },
          "lifecycle": {
            "mode": "synchronous_json",
            "unknown": "no embedding job endpoint inferred"
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/embeddings"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_embedding"
          ],
          "output": {
            "default_dimensions": null,
            "family": "embedding",
            "format": "json",
            "http_success": 200,
            "vectors": "Keep every vector, index, model and usage field. Current dedicated Source validates count, finite float elements and consistent actual dimensions."
          }
        },
        "ctx": 8192,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "{\n  \"model\": \"google/gemini-embedding-2-preview\",\n  \"input\": [\n    \"First document\",\n    \"Second document\"\n  ]\n}",
            "label": "Complete minimal JSON body",
            "language": "json"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncat > embedding-request.json <<'JSON_REQUEST'\n{\n  \"model\": \"google/gemini-embedding-2-preview\",\n  \"input\": [\n    \"First document\",\n    \"Second document\"\n  ]\n}\nJSON_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/embeddings \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @embedding-request.json -o embedding-response.json\n",
            "label": "curl · minimal text embeddings",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "embeddings",
        "hints": [
          "Keep every vector index and dimension.",
          "Multimodal model name does not admit image objects on this exact path."
        ],
        "http": "POST",
        "in": 0.4,
        "input": [
          "text"
        ],
        "label": "Embeddings",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "out": 0,
        "output": [
          "embedding"
        ],
        "path": "/v1/embeddings",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "token",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "request_model_id": "google/gemini-embedding-2-preview",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [],
        "units": [
          {
            "amount": "0.0004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.0000004",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      }
    }
  ],
  "model_id": "google/gemini-embedding-2-preview",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "851cb3ebad961cc3d1d96a19904615d109027b950a07a41b050caa46d524ced3",
    "input_html_sha256": "5e90109423ac3ed99eacf1ec86b98bd9e41cff207f81741c550382b81a562c24",
    "private_audit_sha256": "6f4e7f41036063d35e4122ad17de7b7c1e29e6bab2ba8972d59dc6339746f111",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/en/google-gemini-embedding-2-preview/",
    "description": "Gemini Embedding 2 Preview converts text, images, audio, video and PDF into numerical vectors in one multimodal space. Its separately documented preview profile supports cross-modal retrieval and comparison, an 8,192-token input and flexible vector dimensions.",
    "locale": "en",
    "md_url": "https://ailoot.ai/models/en/google-gemini-embedding-2-preview/index.md",
    "title": "Google: Gemini Embedding 2 Preview — Ailoot",
    "url": "https://ailoot.ai/models/en/google-gemini-embedding-2-preview/"
  },
  "rawModel": {
    "about": "Gemini Embedding 2 Preview is Google’s named preview edition of its native multimodal embedding family. It maps text, images, video, audio and PDF into a shared numerical space, with semantic intent represented across more than 100 languages. The output is embeddings: vectors used to compare and retrieve related material. This preview identity remains separate from the stable Gemini Embedding 2 edition and does not imply interchangeable weights or an identical vector space.\n\nThe original announcement describes cross-modal search, classification, clustering, sentiment analysis and retrieval-augmented generation as downstream applications. A text query can find a related visual item, while an image or clip can also act as a search source. An application stores the representations, compares them and returns the corresponding records; a separate language model can use the retrieved source material to draft an answer. The embedding itself does not contain a natural-language explanation or transcript.\n\nIts own model page documents an 8,192-token input limit and output dimensions from 128 to 3,072, with 768, 1,536 and 3,072 recommended sizes. The preview announcement gives a default of 3,072 and describes Matryoshka Representation Learning, which keeps useful information in shorter prefixes of the representation. Keep one chosen dimension for vectors that must be compared and retain the model edition with the collection, rather than merging representations simply because their lengths match.\n\nThe preview announcement documents up to six PNG or JPEG images per request, up to 120 seconds of MP4 or MOV video and PDF documents up to six pages. It also documents direct audio embedding without an intermediate text transcription. These specifications come from the preview’s own announcement, not from the later stable guide. The announcement does not establish every current audio-duration, codec or frame-sampling limit for this exact preview profile.\n\nInterleaved multimodal input lets the representation reflect relationships between media, such as a picture and its caption. For a product catalogue, supply the photograph and approved description together when they describe one retrievable object. For a document collection, divide the source into focused passages or pages and preserve its title and position. For a media library, select a clip corresponding to the event users should find and keep its original time range with the stored record.\n\nA useful retrieval task makes the intended relationship clear. A question seeking an explanation, a search for visually similar items and clustering by topic are different tasks even when they use the same source collection. Prepare the content consistently, record the edition and dimension and keep every vector linked to its source. Similarity supplies candidates for the application to inspect; it is not proof that two records state the same fact or that a retrieved source fully answers a question.\n\nFor a practical media search, represent the chosen image or video excerpt and compare it with the description of the desired content. Present the matching source alongside its caption or time range so a user can review it. For a knowledge assistant, retrieve the relevant page or passage before generating the written response. The Preview model’s role is the multimodal numerical representation that supports those selection steps, while storage, ranking rules and the final answer remain parts of the surrounding workflow.",
    "alias_of": null,
    "aliases": [],
    "author": "Google",
    "capabilities": {
      "context_length": 8192,
      "manufacturer_input": [
        "text",
        "image",
        "file",
        "audio",
        "video"
      ],
      "manufacturer_output": [
        "embeddings"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.0004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.0000004",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          }
        ],
        "summary": "Full configuration pricing in details."
      }
    ],
    "ctx": 8192,
    "formats": [
      "embeddings"
    ],
    "id": "google/gemini-embedding-2-preview",
    "input": [
      "text"
    ],
    "kind": "embedding",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Keep every vector with its index. Vector count must equal input count; dimensions must be consistent.",
            "errors": [
              {
                "code": null,
                "condition": "Missing model or malformed JSON.",
                "http_status": 400,
                "recovery": "Correct indicated fields.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Configured body limit exceeded.",
                "http_status": 413,
                "recovery": "Reduce actual material.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Input or controls violate current dedicated policy.",
                "http_status": 422,
                "recovery": "Use shown minimal text input without inherited controls.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Admission or quote cannot be bound.",
                "http_status": 503,
                "recovery": "Preserve response; do not substitute a policy.",
                "type": "billing_error"
              }
            ],
            "example_body": {
              "input": [
                "First document",
                "Second document"
              ],
              "model": "google/gemini-embedding-2-preview"
            },
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "create": {
                "http": "POST",
                "path": "/v1/embeddings"
              },
              "job_read": null,
              "mode": "synchronous_json",
              "unknown": "No embedding job endpoint is introduced."
            },
            "material_combinations": [
              {
                "alternatives": [
                  "string",
                  "string[]"
                ],
                "mode": "text_to_embedding"
              }
            ],
            "operation_modes": [
              "single_embedding",
              "batched_embeddings"
            ],
            "outputs": {
              "all_results": "Keep every vector with its index. Vector count must equal input count; dimensions must be consistent.",
              "default_dimensions": null,
              "family": "embedding",
              "fields": [
                {
                  "description": null,
                  "name": "object",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "model",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "data[].index",
                  "type": "integer"
                },
                {
                  "description": null,
                  "name": "data[].embedding",
                  "type": "finite float[]"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "json"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "google/gemini-embedding-2-preview"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "input",
                "required": true,
                "type": "string|string[]"
              }
            ],
            "profile_binding": "Minimal current Source subset: only model and text input. Optional controls and another model dimensions/token limits are not inherited.",
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "input": {
                  "oneOf": [
                    {
                      "minLength": 1,
                      "type": "string"
                    },
                    {
                      "items": {
                        "minLength": 1,
                        "type": "string"
                      },
                      "minItems": 1,
                      "type": "array"
                    }
                  ]
                },
                "model": {
                  "enum": [
                    "google/gemini-embedding-2-preview"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input"
              ],
              "type": "object"
            },
            "schema_template": {
              "input": [
                "First document",
                "Second document"
              ],
              "model": "google/gemini-embedding-2-preview"
            },
            "unsupported": [
              "image/audio/file objects in this minimal text profile",
              "dimensions (current Native43 supports_dimensions:false)",
              "foreign model-specific dimensions or token limits"
            ]
          },
          "hints": [
            "Keep every returned vector and index.",
            "No image/audio/file-object support is inferred from this minimal text profile."
          ],
          "input": {
            "content_type": "application/json",
            "input_shapes": [
              "string",
              "string[]"
            ],
            "material_types": [
              "text"
            ],
            "required": [
              "model",
              "input"
            ]
          },
          "lifecycle": {
            "mode": "synchronous_json",
            "unknown": "no embedding job endpoint inferred"
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/embeddings"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_embedding"
          ],
          "output": {
            "default_dimensions": null,
            "family": "embedding",
            "format": "json",
            "http_success": 200,
            "vectors": "Keep every vector, index, model and usage field. Current dedicated Source validates count, finite float elements and consistent actual dimensions."
          }
        },
        "ctx": 8192,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "{\n  \"model\": \"google/gemini-embedding-2-preview\",\n  \"input\": [\n    \"First document\",\n    \"Second document\"\n  ]\n}",
            "label": "Complete minimal JSON body",
            "language": "json"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncat > embedding-request.json <<'JSON_REQUEST'\n{\n  \"model\": \"google/gemini-embedding-2-preview\",\n  \"input\": [\n    \"First document\",\n    \"Second document\"\n  ]\n}\nJSON_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/embeddings \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @embedding-request.json -o embedding-response.json\n",
            "label": "curl · minimal text embeddings",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "embeddings",
        "hints": [
          "Keep every vector index and dimension.",
          "Multimodal model name does not admit image objects on this exact path."
        ],
        "http": "POST",
        "in": 0.4,
        "input": [
          "text"
        ],
        "label": "Embeddings",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "out": 0,
        "output": [
          "embedding"
        ],
        "path": "/v1/embeddings",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "token",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "request_model_id": "google/gemini-embedding-2-preview",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [],
        "units": [
          {
            "amount": "0.0004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.0000004",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "google/gemini-embedding-2-preview",
        "request_model_id": "google/gemini-embedding-2-preview",
        "route_label": "Ultra"
      }
    ],
    "name": "Google: Gemini Embedding 2 Preview",
    "price": {
      "in": 0.4,
      "in_label": null,
      "out": 0,
      "out_label": null,
      "scope_label": "Token rates",
      "sort_in": 0.4,
      "sort_out": 0,
      "varies": false
    },
    "short": "Gemini Embedding 2 Preview converts text, images, audio, video and PDF into numerical vectors in one multimodal space. Its separately documented preview profile supports cross-modal retrieval and comparison, an 8,192-token input and flexible vector dimensions."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Gemini Embedding 2 Preview converts text, images, audio, video and PDF into numerical vectors in one multimodal space. Its separately documented preview profile supports cross-modal retrieval and comparison, an 8,192-token input and flexible vector dimensions.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "f9ecefbfd2945dfa1a20d6c9d6b9ac9b533d78211c3e44061f45dbbccbc7a25f",
    "renderer_sha256": "fed50305bd3bcc4980ac14df23640efb8c1bc1e819f9d53643d6f43e8974d3fe"
  },
  "sourceRevision": "c206fc9ed6b197a04575f1dcb947da2ae6297759ffb13851b1c2a6c260c43145"
}
