{
  "aboutHtml": "<p>Voyage Context 3 produit des embeddings contextualisés de segments pour la recherche de documents. Chaque segment reçoit son propre vecteur, tandis que le modèle prend également en compte les autres segments fournis du même document. Un système de recherche obtient ainsi une représentation du passage local accompagnée d’un contexte documentaire plus large, par exemple une entité ou un sujet introduit ailleurs dans la source.</p><p>Préparez chaque document comme une séquence ordonnée de segments textuels lisibles. Regroupez les segments d’un même document et préservez leur ordre d’origine. Dans le processus contextualisé de l’éditeur, chaque groupe interne contient les segments d’une source, et des groupes distincts représentent des sources distinctes. Ce regroupement fait partie du sens de l’entrée : il indique au modèle quel texte environnant appartient au document représenté.</p><p>Un cas utile est celui d’un rapport dont l’introduction identifie l’entreprise, tandis qu’un paragraphe ultérieur explique sa croissance. Une recherche sur la croissance de cette entreprise nécessite à la fois le paragraphe précis et l’identité du document. Conservez le texte original du segment et les métadonnées de son document parent avec le vecteur obtenu, afin que le résultat affiche le passage et propose un lien vers la source complète.</p><p>La documentation de référence de l’éditeur prévoit jusqu’à 120 000 tokens pour l’ensemble d’une requête, avec au maximum 1 000 groupes d’entrée et 16 000 segments au total. Le guide du modèle indique séparément une fenêtre de 32 000 tokens par segment. Distinguez ces périmètres lors de la préparation des contenus : une limite portant sur un seul segment et une limite portant sur la requête complète décrivent des tailles d’entrée différentes. Vérifiez le total après avoir découpé la source, au lieu de supposer que chaque segment peut atteindre son maximum dans la même requête.</p><p>Pour la recherche de documents, identifiez les passages regroupés comme des entrées documentaires. Préparez chaque question de recherche dans son propre groupe de requête. L’éditeur recommande de fournir des segments de document sans chevauchement, ce qui permet à la représentation contextualisée d’intégrer les informations environnantes sans répéter le texte dans chaque passage. Préservez la correspondance entre le groupe documentaire, la position du segment et le vecteur renvoyé lors de l’écriture de l’index.</p><p>Voyage Context 3 prend en charge 2 048, 1 024, 512 et 256 dimensions, avec des sorties à virgule flottante, en entiers sur huit bits et binaires. Choisissez une représentation d’index et évaluez-la sur les mêmes documents sources et questions. Conservez la dimension et le type de données sélectionnés avec l’index pour que la représentation des requêtes et les vecteurs stockés restent cohérents.</p><p>Utilisez les vecteurs obtenus pour la recherche de passages, la découverte de documents ou l’étape de recherche d’un assistant travaillant sur des rapports, des articles scientifiques, des contrats ou des manuels techniques. Un résultat peut identifier un passage ciblé, tandis que le lien source donne accès aux définitions et aux réserves présentes ailleurs dans le document. Préservez les versions des documents et les autorisations dans les métadonnées applicatives associées aux vecteurs.</p><p>Testez des questions qui nécessitent à la fois un détail local et un contexte à l’échelle du document. Incluez des passages similaires issus de sources différentes, des entités nommées introduites uniquement au début et des questions dont les éléments justificatifs sont répartis sur plusieurs sections. Vérifiez si le segment attendu est retrouvé et si l’application présente suffisamment de texte environnant pour l’interpréter. Lorsqu’une source change, régénérez délibérément le groupe documentaire concerné pour que ses segments contextualisés correspondent à une seule version cohérente.</p>",
  "aboutText": "Voyage Context 3 produit des embeddings contextualisés de segments pour la recherche de documents. Chaque segment reçoit son propre vecteur, tandis que le modèle prend également en compte les autres segments fournis du même document. Un système de recherche obtient ainsi une représentation du passage local accompagnée d’un contexte documentaire plus large, par exemple une entité ou un sujet introduit ailleurs dans la source.\n\nPréparez chaque document comme une séquence ordonnée de segments textuels lisibles. Regroupez les segments d’un même document et préservez leur ordre d’origine. Dans le processus contextualisé de l’éditeur, chaque groupe interne contient les segments d’une source, et des groupes distincts représentent des sources distinctes. Ce regroupement fait partie du sens de l’entrée : il indique au modèle quel texte environnant appartient au document représenté.\n\nUn cas utile est celui d’un rapport dont l’introduction identifie l’entreprise, tandis qu’un paragraphe ultérieur explique sa croissance. Une recherche sur la croissance de cette entreprise nécessite à la fois le paragraphe précis et l’identité du document. Conservez le texte original du segment et les métadonnées de son document parent avec le vecteur obtenu, afin que le résultat affiche le passage et propose un lien vers la source complète.\n\nLa documentation de référence de l’éditeur prévoit jusqu’à 120 000 tokens pour l’ensemble d’une requête, avec au maximum 1 000 groupes d’entrée et 16 000 segments au total. Le guide du modèle indique séparément une fenêtre de 32 000 tokens par segment. Distinguez ces périmètres lors de la préparation des contenus : une limite portant sur un seul segment et une limite portant sur la requête complète décrivent des tailles d’entrée différentes. Vérifiez le total après avoir découpé la source, au lieu de supposer que chaque segment peut atteindre son maximum dans la même requête.\n\nPour la recherche de documents, identifiez les passages regroupés comme des entrées documentaires. Préparez chaque question de recherche dans son propre groupe de requête. L’éditeur recommande de fournir des segments de document sans chevauchement, ce qui permet à la représentation contextualisée d’intégrer les informations environnantes sans répéter le texte dans chaque passage. Préservez la correspondance entre le groupe documentaire, la position du segment et le vecteur renvoyé lors de l’écriture de l’index.\n\nVoyage Context 3 prend en charge 2 048, 1 024, 512 et 256 dimensions, avec des sorties à virgule flottante, en entiers sur huit bits et binaires. Choisissez une représentation d’index et évaluez-la sur les mêmes documents sources et questions. Conservez la dimension et le type de données sélectionnés avec l’index pour que la représentation des requêtes et les vecteurs stockés restent cohérents.\n\nUtilisez les vecteurs obtenus pour la recherche de passages, la découverte de documents ou l’étape de recherche d’un assistant travaillant sur des rapports, des articles scientifiques, des contrats ou des manuels techniques. Un résultat peut identifier un passage ciblé, tandis que le lien source donne accès aux définitions et aux réserves présentes ailleurs dans le document. Préservez les versions des documents et les autorisations dans les métadonnées applicatives associées aux vecteurs.\n\nTestez des questions qui nécessitent à la fois un détail local et un contexte à l’échelle du document. Incluez des passages similaires issus de sources différentes, des entités nommées introduites uniquement au début et des questions dont les éléments justificatifs sont répartis sur plusieurs sections. Vérifiez si le segment attendu est retrouvé et si l’application présente suffisamment de texte environnant pour l’interpréter. Lorsqu’une source change, régénérez délibérément le groupe documentaire concerné pour que ses segments contextualisés correspondent à une seule version cohérente.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "df56a5ceb92588099979a449f0af64af42b07a285535be3aea5c695df6b81206",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "fr",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Voyage AI: Voyage Context 3</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Fermer\">×</button></div><div class=\"idline\"><span>Voyage AI /</span><code>voyage-context-3</code><button type=\"button\" id=\"copy-id\">Copier l’ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Rubriques de la fiche modèle\"><button type=\"button\" data-card-jump=\"overview\">Premiers pas</button><button type=\"button\" data-card-jump=\"methods\">Entrées et méthodes</button><button type=\"button\" data-card-jump=\"pricing\">Tarifs</button><button type=\"button\" data-card-jump=\"examples\">Exemples</button><button type=\"button\" data-card-jump=\"results\">Résultats</button><button type=\"button\" data-card-jump=\"aliases\">Alias</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Méthodes API\"><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|voyage-context-3\">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\">Premiers pas</h3><p class=\"mdesc-full\">Voyage Context 3 crée un vecteur pour chaque segment de document en intégrant le contexte des autres segments de ce même document. Il permet de retrouver précisément des passages dans des documents longs, avec des dimensions sélectionnables et des embeddings quantifiés.</p><dl class=\"card-io\" data-card-io><div><dt>Entrées acceptées</dt><dd>Texte</dd></div><div><dt>Résultats</dt><dd>embedding</dd></div></dl><details class=\"card-about\"><summary>À propos du modèle</summary><p class=\"note-s\" data-model-method-boundary>Cette description présente les capacités du modèle. Les entrées, sorties et options disponibles dans Ailoot pour la méthode sélectionnée figurent ci-dessous.</p><div class=\"mabout\" id=\"m-about\"><p>Voyage Context 3 produit des embeddings contextualisés de segments pour la recherche de documents. Chaque segment reçoit son propre vecteur, tandis que le modèle prend également en compte les autres segments fournis du même document. Un système de recherche obtient ainsi une représentation du passage local accompagnée d’un contexte documentaire plus large, par exemple une entité ou un sujet introduit ailleurs dans la source.</p><p>Préparez chaque document comme une séquence ordonnée de segments textuels lisibles. Regroupez les segments d’un même document et préservez leur ordre d’origine. Dans le processus contextualisé de l’éditeur, chaque groupe interne contient les segments d’une source, et des groupes distincts représentent des sources distinctes. Ce regroupement fait partie du sens de l’entrée : il indique au modèle quel texte environnant appartient au document représenté.</p><p>Un cas utile est celui d’un rapport dont l’introduction identifie l’entreprise, tandis qu’un paragraphe ultérieur explique sa croissance. Une recherche sur la croissance de cette entreprise nécessite à la fois le paragraphe précis et l’identité du document. Conservez le texte original du segment et les métadonnées de son document parent avec le vecteur obtenu, afin que le résultat affiche le passage et propose un lien vers la source complète.</p><p>La documentation de référence de l’éditeur prévoit jusqu’à 120 000 tokens pour l’ensemble d’une requête, avec au maximum 1 000 groupes d’entrée et 16 000 segments au total. Le guide du modèle indique séparément une fenêtre de 32 000 tokens par segment. Distinguez ces périmètres lors de la préparation des contenus : une limite portant sur un seul segment et une limite portant sur la requête complète décrivent des tailles d’entrée différentes. Vérifiez le total après avoir découpé la source, au lieu de supposer que chaque segment peut atteindre son maximum dans la même requête.</p><p>Pour la recherche de documents, identifiez les passages regroupés comme des entrées documentaires. Préparez chaque question de recherche dans son propre groupe de requête. L’éditeur recommande de fournir des segments de document sans chevauchement, ce qui permet à la représentation contextualisée d’intégrer les informations environnantes sans répéter le texte dans chaque passage. Préservez la correspondance entre le groupe documentaire, la position du segment et le vecteur renvoyé lors de l’écriture de l’index.</p><p>Voyage Context 3 prend en charge 2 048, 1 024, 512 et 256 dimensions, avec des sorties à virgule flottante, en entiers sur huit bits et binaires. Choisissez une représentation d’index et évaluez-la sur les mêmes documents sources et questions. Conservez la dimension et le type de données sélectionnés avec l’index pour que la représentation des requêtes et les vecteurs stockés restent cohérents.</p><p>Utilisez les vecteurs obtenus pour la recherche de passages, la découverte de documents ou l’étape de recherche d’un assistant travaillant sur des rapports, des articles scientifiques, des contrats ou des manuels techniques. Un résultat peut identifier un passage ciblé, tandis que le lien source donne accès aux définitions et aux réserves présentes ailleurs dans le document. Préservez les versions des documents et les autorisations dans les métadonnées applicatives associées aux vecteurs.</p><p>Testez des questions qui nécessitent à la fois un détail local et un contexte à l’échelle du document. Incluez des passages similaires issus de sources différentes, des entités nommées introduites uniquement au début et des questions dont les éléments justificatifs sont répartis sur plusieurs sections. Vérifiez si le segment attendu est retrouvé et si l’application présente suffisamment de texte environnant pour l’interpréter. Lorsqu’une source change, régénérez délibérément le groupe documentaire concerné pour que ses segments contextualisés correspondent à une seule version cohérente.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Disponible dans Ailoot · entrées et méthodes</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Plongements vectoriels</b> <code>POST /v1/embeddings</code></summary><dl class=\"method-capabilities\"><div><dt>Types d’entrée</dt><dd><code>text</code></dd></div><div><dt>Types de sortie</dt><dd><code>embedding</code></dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Champ</th><th>Type</th><th>Exigence</th><th>Valeurs et limites</th><th>Par défaut</th></tr></thead><tbody><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</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=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Obligatoire</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>voyage-context-3</div><div>Conditions: Utilisez le sélecteur exact de modèle Ailoot.</div></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</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 or array&lt;string&gt;</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Obligatoire</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>Conditions: Un texte ou une liste de textes ; conservez un vecteur pour chaque élément de data renvoyé, ainsi que son index.</div></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr></tbody></table></div><details class=\"note-s\" data-method-contract><summary>Paramètres et cycle de vie de la méthode</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Paramètre</th><th>Contrat</th></tr></thead><tbody><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>content_type</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span>application/json</td></tr><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>required</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span>model, input</td></tr><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>optional</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span></td></tr><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>material_types</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span>text</td></tr><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>conditions</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span>Envoyez du texte avec le modèle sélectionné ; conservez chaque vecteur renvoyé et son index.</td></tr></tbody></table></div><p>Cycle de vie : <code>synchronous</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Tarifs</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Les tarifs n’ajoutent pas d’options de requête. Les paramètres pris en charge figurent dans la méthode sélectionnée.</p><dl data-price-conditions><dt>Mode rapide</dt><dd>Non précisé <span class=\"note-s\">Lorsque le mode rapide est sélectionné</span></dd><dt>Mode Flex</dt><dd>Non précisé <span class=\"note-s\">Lorsque le mode flex est sélectionné</span></dd><dt>Effort de raisonnement maximal</dt><dd>Non précisé <span class=\"note-s\">Lorsque l’effort de raisonnement maximal utilise l’ajustement par défaut (default)</span></dd></dl></div><div data-declared-tariff-pricing><h4>Tarifs Ailoot</h4><h4>Prix par configuration</h4><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Configuration</th><th>Barème tarifaire</th><th>Coût</th></tr></thead><tbody><tr><th data-cell-label=\"Configuration\" scope=\"row\"><span class=\"card-cell-label\">Configuration</span>Tarifs de base par jeton</th><td data-cell-label=\"Barème tarifaire\"><span class=\"card-cell-label\">Barème tarifaire</span>Tarif de base</td><td data-cell-label=\"Coût\"><span class=\"card-cell-label\">Coût</span><div><span>Entrée · Tokens en entrée</span> <b>$0.0004</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Sortie · Tokens en sortie</span> <b>$0</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Entrée · Lecture du cache</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Entrée · Écriture dans le cache</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Entrée · Écriture dans le cache, 1 h</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. <a href=\"/docs/fr/billing/reserve/\">Fonctionnement de la réservation et du débit →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Exemples de requêtes</h3><h4>Ailoot Ultra · Plongements vectoriels</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Variantes du code\"><button class=\"cg-tab\" id=\"model-code-2791-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2791-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · enregistrer tous les vecteurs et les données d’utilisation</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copier le 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-2791-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2791-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\ncat &gt; request.json &lt;&lt;&#39;JSON&#39;\n{\n  &quot;model&quot;: &quot;voyage-context-3&quot;,\n  &quot;input&quot;: &quot;The quick brown fox jumps over the lazy dog&quot;\n}\nJSON\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 @request.json -D response-headers.txt -o embeddings.json\n# Keep every data item and its index, the full usage object and response headers.\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Recevoir et enregistrer les résultats</h3></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Alias</h3><h4>Alias du modèle</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=voyage-context-3&amp;route=Ultra&amp;caller=voyage-context-3&amp;fmt=embeddings\"><code>voyage-context-3</code></a></span></p><h4>Alias des chemins de méthode</h4><p class=\"note-s\">Utilisez les chemins de méthode indiqués ci-dessus.</p><h4>ID d’appel associés</h4><p class=\"note-s\"><a href=\"#m=voyage-context-3&amp;route=Ultra&amp;caller=voyage-context-3&amp;fmt=embeddings\"><code>voyage-context-3</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "voyage-context-3",
        "fmt": "embeddings",
        "http": "POST",
        "path": "/v1/embeddings",
        "request_model_id": "voyage-context-3",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|embeddings|/v1/embeddings|voyage-context-3",
      "ordinal": 0,
      "rawMethod": {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Save the complete JSON response, every vector with its index, all usage fields and request headers.",
            "lifecycle": {
              "content": [],
              "create": {
                "http": "POST",
                "path": "/v1/embeddings"
              },
              "mode": "synchronous",
              "status": [],
              "unknown": "Conservez la réponse d’origine et X-Client-Request-ID pour le rapprochement. Une réponse ambiguë n’autorise pas à soumettre de nouveau la même demande de création.",
              "unknown_no_replay": true
            },
            "outputs": {
              "all_results": "Enregistrez la réponse JSON complète, chaque vecteur avec son indice, tous les champs relatifs à l’utilisation et les en-têtes de la requête.",
              "every_actual_output": true,
              "family": "embedding",
              "fields": [
                {
                  "name": "object",
                  "type": "string"
                },
                {
                  "name": "model",
                  "type": "string"
                },
                {
                  "name": "data[].index",
                  "type": "integer"
                },
                {
                  "name": "data[].embedding",
                  "type": "array<number>"
                },
                {
                  "name": "usage",
                  "type": "object"
                },
                {
                  "name": "usage.prompt_tokens",
                  "type": "integer"
                },
                {
                  "name": "usage.total_tokens",
                  "type": "integer"
                }
              ]
            },
            "parameters": [
              {
                "conditions": "Utilisez le sélecteur exact de modèle Ailoot.",
                "default_known": false,
                "enum": [
                  "voyage-context-3"
                ],
                "enum_known": true,
                "maximum_length": null,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "conditions": "Un texte ou une liste de textes ; conservez un vecteur pour chaque élément de data renvoyé, ainsi que son index.",
                "default_known": false,
                "enum_known": false,
                "maximum_length": null,
                "name": "input",
                "oneOf": [
                  {
                    "minLength": 1,
                    "type": "string"
                  },
                  {
                    "items": {
                      "minLength": 1,
                      "type": "string"
                    },
                    "minItems": 1,
                    "type": "array"
                  }
                ],
                "required": true,
                "type": "string or array<string>"
              }
            ],
            "request_schema": {
              "additionalProperties": true,
              "properties": {
                "input": {
                  "oneOf": [
                    {
                      "minLength": 1,
                      "type": "string"
                    },
                    {
                      "items": {
                        "minLength": 1,
                        "type": "string"
                      },
                      "minItems": 1,
                      "type": "array"
                    }
                  ]
                },
                "model": {
                  "enum": [
                    "voyage-context-3"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input": "The quick brown fox jumps over the lazy dog",
                "model": "voyage-context-3"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "conditions": [
              "Envoyez du texte avec le modèle sélectionné ; conservez chaque vecteur renvoyé et son index."
            ],
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional": [],
            "required": [
              "model",
              "input"
            ]
          },
          "lifecycle": {
            "content": [],
            "create": {
              "http": "POST",
              "path": "/v1/embeddings"
            },
            "mode": "synchronous",
            "status": [],
            "unknown": "Keep the original response and X-Client-Request-ID for reconciliation. An ambiguous response is not permission to submit the same creation again.",
            "unknown_no_replay": true
          },
          "method": {
            "http": "POST",
            "path": "/v1/embeddings"
          },
          "output": {
            "all_results": "Save the complete JSON response, every vector with its index, all usage fields and request headers.",
            "every_actual_output": true,
            "family": "embedding",
            "fields": [
              {
                "name": "object",
                "type": "string"
              },
              {
                "name": "model",
                "type": "string"
              },
              {
                "name": "data[].index",
                "type": "integer"
              },
              {
                "name": "data[].embedding",
                "type": "array<number>"
              },
              {
                "name": "usage",
                "type": "object"
              },
              {
                "name": "usage.prompt_tokens",
                "type": "integer"
              },
              {
                "name": "usage.total_tokens",
                "type": "integer"
              }
            ]
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Tarifs de base par jeton",
            "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": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncat > request.json <<'JSON'\n{\n  \"model\": \"voyage-context-3\",\n  \"input\": \"The quick brown fox jumps over the lazy dog\"\n}\nJSON\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 @request.json -D response-headers.txt -o embeddings.json\n# Keep every data item and its index, the full usage object and response headers.\n",
            "label": "curl · save all vectors and usage",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "embeddings",
        "http": "POST",
        "in": 0.4,
        "input": [
          "text"
        ],
        "label": "Plongements vectoriels",
        "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": "voyage-context-3",
        "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": "voyage-context-3",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "550e7fff134809164b880abf17ab92483ccb7fc04a7b60133c7d983d84ccfdb9",
    "input_html_sha256": "fd0dc272debdef9a1f6e513e7ed88517423478093ec0b822c749ec89660f2433",
    "private_audit_sha256": "7683ca9cf12bf14affe78c659b71242ca8481faae4f20f7c2eac3ce3cc3778aa",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/fr/voyage-context-3/",
    "description": "Voyage Context 3 crée un vecteur pour chaque segment de document en intégrant le contexte des autres segments de ce même document. Il permet de retrouver précisément des passages dans des documents longs, avec des dimensions sélectionnables et des embeddings quantifiés.",
    "locale": "fr",
    "md_url": "https://ailoot.ai/models/fr/voyage-context-3/index.md",
    "title": "Voyage AI: Voyage Context 3 — Ailoot",
    "url": "https://ailoot.ai/models/fr/voyage-context-3/"
  },
  "rawModel": {
    "about": "Voyage Context 3 produit des embeddings contextualisés de segments pour la recherche de documents. Chaque segment reçoit son propre vecteur, tandis que le modèle prend également en compte les autres segments fournis du même document. Un système de recherche obtient ainsi une représentation du passage local accompagnée d’un contexte documentaire plus large, par exemple une entité ou un sujet introduit ailleurs dans la source.\n\nPréparez chaque document comme une séquence ordonnée de segments textuels lisibles. Regroupez les segments d’un même document et préservez leur ordre d’origine. Dans le processus contextualisé de l’éditeur, chaque groupe interne contient les segments d’une source, et des groupes distincts représentent des sources distinctes. Ce regroupement fait partie du sens de l’entrée : il indique au modèle quel texte environnant appartient au document représenté.\n\nUn cas utile est celui d’un rapport dont l’introduction identifie l’entreprise, tandis qu’un paragraphe ultérieur explique sa croissance. Une recherche sur la croissance de cette entreprise nécessite à la fois le paragraphe précis et l’identité du document. Conservez le texte original du segment et les métadonnées de son document parent avec le vecteur obtenu, afin que le résultat affiche le passage et propose un lien vers la source complète.\n\nLa documentation de référence de l’éditeur prévoit jusqu’à 120 000 tokens pour l’ensemble d’une requête, avec au maximum 1 000 groupes d’entrée et 16 000 segments au total. Le guide du modèle indique séparément une fenêtre de 32 000 tokens par segment. Distinguez ces périmètres lors de la préparation des contenus : une limite portant sur un seul segment et une limite portant sur la requête complète décrivent des tailles d’entrée différentes. Vérifiez le total après avoir découpé la source, au lieu de supposer que chaque segment peut atteindre son maximum dans la même requête.\n\nPour la recherche de documents, identifiez les passages regroupés comme des entrées documentaires. Préparez chaque question de recherche dans son propre groupe de requête. L’éditeur recommande de fournir des segments de document sans chevauchement, ce qui permet à la représentation contextualisée d’intégrer les informations environnantes sans répéter le texte dans chaque passage. Préservez la correspondance entre le groupe documentaire, la position du segment et le vecteur renvoyé lors de l’écriture de l’index.\n\nVoyage Context 3 prend en charge 2 048, 1 024, 512 et 256 dimensions, avec des sorties à virgule flottante, en entiers sur huit bits et binaires. Choisissez une représentation d’index et évaluez-la sur les mêmes documents sources et questions. Conservez la dimension et le type de données sélectionnés avec l’index pour que la représentation des requêtes et les vecteurs stockés restent cohérents.\n\nUtilisez les vecteurs obtenus pour la recherche de passages, la découverte de documents ou l’étape de recherche d’un assistant travaillant sur des rapports, des articles scientifiques, des contrats ou des manuels techniques. Un résultat peut identifier un passage ciblé, tandis que le lien source donne accès aux définitions et aux réserves présentes ailleurs dans le document. Préservez les versions des documents et les autorisations dans les métadonnées applicatives associées aux vecteurs.\n\nTestez des questions qui nécessitent à la fois un détail local et un contexte à l’échelle du document. Incluez des passages similaires issus de sources différentes, des entités nommées introduites uniquement au début et des questions dont les éléments justificatifs sont répartis sur plusieurs sections. Vérifiez si le segment attendu est retrouvé et si l’application présente suffisamment de texte environnant pour l’interpréter. Lorsqu’une source change, régénérez délibérément le groupe documentaire concerné pour que ses segments contextualisés correspondent à une seule version cohérente.",
    "about_sha256": "cbe672f81d248e79c90f9384b4d5a3ff311043f96a3b07b7eb8b4ede52d2cd43",
    "alias_of": null,
    "aliases": [],
    "author": "Voyage AI",
    "capabilities": {
      "context_length": 120000,
      "manufacturer_input": [
        "text"
      ],
      "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": "La tarification complète de la configuration figure dans les détails."
      }
    ],
    "ctx": null,
    "display_name": "Voyage AI: Voyage Context 3",
    "formats": [
      "embeddings"
    ],
    "id": "voyage-context-3",
    "input": [
      "text"
    ],
    "kind": "embedding",
    "locale": "en",
    "max_out": null,
    "methods": [
      {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Save the complete JSON response, every vector with its index, all usage fields and request headers.",
            "lifecycle": {
              "content": [],
              "create": {
                "http": "POST",
                "path": "/v1/embeddings"
              },
              "mode": "synchronous",
              "status": [],
              "unknown": "Conservez la réponse d’origine et X-Client-Request-ID pour le rapprochement. Une réponse ambiguë n’autorise pas à soumettre de nouveau la même demande de création.",
              "unknown_no_replay": true
            },
            "outputs": {
              "all_results": "Enregistrez la réponse JSON complète, chaque vecteur avec son indice, tous les champs relatifs à l’utilisation et les en-têtes de la requête.",
              "every_actual_output": true,
              "family": "embedding",
              "fields": [
                {
                  "name": "object",
                  "type": "string"
                },
                {
                  "name": "model",
                  "type": "string"
                },
                {
                  "name": "data[].index",
                  "type": "integer"
                },
                {
                  "name": "data[].embedding",
                  "type": "array<number>"
                },
                {
                  "name": "usage",
                  "type": "object"
                },
                {
                  "name": "usage.prompt_tokens",
                  "type": "integer"
                },
                {
                  "name": "usage.total_tokens",
                  "type": "integer"
                }
              ]
            },
            "parameters": [
              {
                "conditions": "Utilisez le sélecteur exact de modèle Ailoot.",
                "default_known": false,
                "enum": [
                  "voyage-context-3"
                ],
                "enum_known": true,
                "maximum_length": null,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "conditions": "Un texte ou une liste de textes ; conservez un vecteur pour chaque élément de data renvoyé, ainsi que son index.",
                "default_known": false,
                "enum_known": false,
                "maximum_length": null,
                "name": "input",
                "oneOf": [
                  {
                    "minLength": 1,
                    "type": "string"
                  },
                  {
                    "items": {
                      "minLength": 1,
                      "type": "string"
                    },
                    "minItems": 1,
                    "type": "array"
                  }
                ],
                "required": true,
                "type": "string or array<string>"
              }
            ],
            "request_schema": {
              "additionalProperties": true,
              "properties": {
                "input": {
                  "oneOf": [
                    {
                      "minLength": 1,
                      "type": "string"
                    },
                    {
                      "items": {
                        "minLength": 1,
                        "type": "string"
                      },
                      "minItems": 1,
                      "type": "array"
                    }
                  ]
                },
                "model": {
                  "enum": [
                    "voyage-context-3"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input": "The quick brown fox jumps over the lazy dog",
                "model": "voyage-context-3"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "conditions": [
              "Envoyez du texte avec le modèle sélectionné ; conservez chaque vecteur renvoyé et son index."
            ],
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional": [],
            "required": [
              "model",
              "input"
            ]
          },
          "lifecycle": {
            "content": [],
            "create": {
              "http": "POST",
              "path": "/v1/embeddings"
            },
            "mode": "synchronous",
            "status": [],
            "unknown": "Keep the original response and X-Client-Request-ID for reconciliation. An ambiguous response is not permission to submit the same creation again.",
            "unknown_no_replay": true
          },
          "method": {
            "http": "POST",
            "path": "/v1/embeddings"
          },
          "output": {
            "all_results": "Save the complete JSON response, every vector with its index, all usage fields and request headers.",
            "every_actual_output": true,
            "family": "embedding",
            "fields": [
              {
                "name": "object",
                "type": "string"
              },
              {
                "name": "model",
                "type": "string"
              },
              {
                "name": "data[].index",
                "type": "integer"
              },
              {
                "name": "data[].embedding",
                "type": "array<number>"
              },
              {
                "name": "usage",
                "type": "object"
              },
              {
                "name": "usage.prompt_tokens",
                "type": "integer"
              },
              {
                "name": "usage.total_tokens",
                "type": "integer"
              }
            ]
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Tarifs de base par jeton",
            "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": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncat > request.json <<'JSON'\n{\n  \"model\": \"voyage-context-3\",\n  \"input\": \"The quick brown fox jumps over the lazy dog\"\n}\nJSON\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 @request.json -D response-headers.txt -o embeddings.json\n# Keep every data item and its index, the full usage object and response headers.\n",
            "label": "curl · save all vectors and usage",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "embeddings",
        "http": "POST",
        "in": 0.4,
        "input": [
          "text"
        ],
        "label": "Plongements vectoriels",
        "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": "voyage-context-3",
        "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": "voyage-context-3",
        "request_model_id": "voyage-context-3",
        "route_label": "Ultra"
      }
    ],
    "name": "Voyage AI: Voyage Context 3",
    "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": "Voyage Context 3 crée un vecteur pour chaque segment de document en intégrant le contexte des autres segments de ce même document. Il permet de retrouver précisément des passages dans des documents longs, avec des dimensions sélectionnables et des embeddings quantifiés.",
    "short_sha256": "ecf5347d318cafaa85e440415592285b9b3d6c51afeb2467a37418c7b94e3dd3"
  },
  "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": "Voyage Context 3 crée un vecteur pour chaque segment de document en intégrant le contexte des autres segments de ce même document. Il permet de retrouver précisément des passages dans des documents longs, avec des dimensions sélectionnables et des embeddings quantifiés.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "56175149239ba8acac37d0c986f71543ffac6abaa8c2444b29275f32eee92d1f",
    "renderer_sha256": "44d2db1deadc475e1793597083716540bae7bbc53606f05f58780fec5f115dd4"
  },
  "sourceRevision": "73fdce45761869fc003c148e1bd6b0a1271879736a25195275f206a4fc7b682d"
}
