{
  "aboutHtml": "<p>Voyage Code 3 est un modèle d’embeddings spécialisé dans la recherche de code source. L’éditeur décrit des tâches allant du langage naturel au code, du code au code et des docstrings au code : une question peut trouver une implémentation, un fragment de code peut trouver une logique apparentée et une description de fonction peut localiser du code pertinent. Le modèle produit des vecteurs pour la recherche, plutôt qu’un fichier modifié ou un programme terminé.</p><p>Préparez le contenu du dépôt autour d’unités de code significatives. Conservez une fonction avec son nom, sa signature et les commentaires qui expliquent son rôle. Pour un composant plus vaste, incluez les définitions voisines nécessaires à la compréhension de l’opération. Stockez séparément le dépôt, la révision, le chemin du fichier et l’emplacement des lignes, afin qu’un résultat de recherche ouvre exactement la source dont l’embedding a été créé.</p><p>Une recherche en langage naturel peut décrire un comportement, par exemple trouver la partie d’un projet qui valide un fichier téléversé avant de l’enregistrer. Une requête fondée sur du code peut fournir une fonction dont il faut retrouver un rôle correspondant ailleurs. Choisissez des recherches représentatives de tâches de développement réelles, notamment avec des noms peu familiers, des implémentations similaires et des fonctions utilitaires dont le sens dépend du code environnant.</p><p>La fenêtre de contexte de 32 000 jetons peut accueillir des passages de code volumineux. Utilisez cet espace à bon escient : une fonction complète et ses dépendances pertinentes peuvent être plus informatives qu’un bloc arbitraire coupé au milieu du flux de contrôle. Gardez une mise en forme lisible du code source et préservez la syntaxe du langage pendant l’extraction. Si un fichier source dépasse la fenêtre d’entrée, découpez-le à des limites structurelles utiles et conservez la relation entre les passages et leur fichier parent.</p><p>Voyage Code 3 prend en charge des embeddings de 2 048, 1 024, 512 ou 256 dimensions, ainsi que des représentations à virgule flottante, sur huit bits signés ou non signés, et binaires. Ces paramètres permettent différentes tailles d’index de dépôts et configurations de recherche. Évaluez une représentation compacte avec les mêmes recherches réelles que la référence plus grande, en vérifiant si la bonne fonction ou le bon fichier reste parmi les résultats utiles.</p><p>Pour un assistant de programmation, retrouvez d’abord les passages sources pertinents, puis fournissez ces passages et leurs références de fichiers au composant chargé de répondre ou d’effectuer une modification. Une correspondance par similarité aide à choisir le contexte ; elle n’établit pas que deux implémentations sont interchangeables. Examinez les entrées, les effets de bord et les contrats environnants dans le code retrouvé avant de vous en servir pour guider une modification.</p><p>Séparez les versions sans rapport d’un dépôt à l’aide de métadonnées et maintenez la traçabilité des révisions indexées. Si une fonction est déplacée ou que son comportement change, mettez à jour son vecteur et son emplacement source. Les mêmes paramètres d’embedding doivent décrire la source indexée et ses requêtes. Lors d’une migration d’index, comparez les résultats à l’ensemble de questions existant pour qu’un changement de modèle ou de représentation vectorielle ne modifie pas silencieusement le code présenté au développeur.</p><p>Les vérifications utiles consistent notamment à déterminer si une requête trouve l’implémentation réelle plutôt qu’un simple nom de test, si une docstring trouve sa fonction correspondante et si du code sémantiquement lié est distingué d’un fragment superficiellement similaire. Conservez le texte source renvoyé et son emplacement dans le résultat de recherche pour que les développeurs puissent examiner les éléments justificatifs. Les embeddings spécialisés dans le code deviennent ainsi un outil pratique de navigation et de sélection du contexte.</p>",
  "aboutText": "Voyage Code 3 est un modèle d’embeddings spécialisé dans la recherche de code source. L’éditeur décrit des tâches allant du langage naturel au code, du code au code et des docstrings au code : une question peut trouver une implémentation, un fragment de code peut trouver une logique apparentée et une description de fonction peut localiser du code pertinent. Le modèle produit des vecteurs pour la recherche, plutôt qu’un fichier modifié ou un programme terminé.\n\nPréparez le contenu du dépôt autour d’unités de code significatives. Conservez une fonction avec son nom, sa signature et les commentaires qui expliquent son rôle. Pour un composant plus vaste, incluez les définitions voisines nécessaires à la compréhension de l’opération. Stockez séparément le dépôt, la révision, le chemin du fichier et l’emplacement des lignes, afin qu’un résultat de recherche ouvre exactement la source dont l’embedding a été créé.\n\nUne recherche en langage naturel peut décrire un comportement, par exemple trouver la partie d’un projet qui valide un fichier téléversé avant de l’enregistrer. Une requête fondée sur du code peut fournir une fonction dont il faut retrouver un rôle correspondant ailleurs. Choisissez des recherches représentatives de tâches de développement réelles, notamment avec des noms peu familiers, des implémentations similaires et des fonctions utilitaires dont le sens dépend du code environnant.\n\nLa fenêtre de contexte de 32 000 jetons peut accueillir des passages de code volumineux. Utilisez cet espace à bon escient : une fonction complète et ses dépendances pertinentes peuvent être plus informatives qu’un bloc arbitraire coupé au milieu du flux de contrôle. Gardez une mise en forme lisible du code source et préservez la syntaxe du langage pendant l’extraction. Si un fichier source dépasse la fenêtre d’entrée, découpez-le à des limites structurelles utiles et conservez la relation entre les passages et leur fichier parent.\n\nVoyage Code 3 prend en charge des embeddings de 2 048, 1 024, 512 ou 256 dimensions, ainsi que des représentations à virgule flottante, sur huit bits signés ou non signés, et binaires. Ces paramètres permettent différentes tailles d’index de dépôts et configurations de recherche. Évaluez une représentation compacte avec les mêmes recherches réelles que la référence plus grande, en vérifiant si la bonne fonction ou le bon fichier reste parmi les résultats utiles.\n\nPour un assistant de programmation, retrouvez d’abord les passages sources pertinents, puis fournissez ces passages et leurs références de fichiers au composant chargé de répondre ou d’effectuer une modification. Une correspondance par similarité aide à choisir le contexte ; elle n’établit pas que deux implémentations sont interchangeables. Examinez les entrées, les effets de bord et les contrats environnants dans le code retrouvé avant de vous en servir pour guider une modification.\n\nSéparez les versions sans rapport d’un dépôt à l’aide de métadonnées et maintenez la traçabilité des révisions indexées. Si une fonction est déplacée ou que son comportement change, mettez à jour son vecteur et son emplacement source. Les mêmes paramètres d’embedding doivent décrire la source indexée et ses requêtes. Lors d’une migration d’index, comparez les résultats à l’ensemble de questions existant pour qu’un changement de modèle ou de représentation vectorielle ne modifie pas silencieusement le code présenté au développeur.\n\nLes vérifications utiles consistent notamment à déterminer si une requête trouve l’implémentation réelle plutôt qu’un simple nom de test, si une docstring trouve sa fonction correspondante et si du code sémantiquement lié est distingué d’un fragment superficiellement similaire. Conservez le texte source renvoyé et son emplacement dans le résultat de recherche pour que les développeurs puissent examiner les éléments justificatifs. Les embeddings spécialisés dans le code deviennent ainsi un outil pratique de navigation et de sélection du contexte.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "3f0c6aeff938bb2559d06b152bff1b9b8ece124228f43e1055a620f97fad0cf8",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "fr-ca",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Voyage AI: Voyage Code 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-code-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\">Pour commencer</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-code-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\">Pour commencer</h3><p class=\"mdesc-full\">Voyage Code 3 crée des embeddings pour retrouver du code à partir de texte, de code ou de docstrings. Une fenêtre de 32 000 jetons, des dimensions vectorielles sélectionnables et une sortie quantifiée prennent en charge la recherche dans les dépôts et la sélection de contexte de code pour les assistants de programmation.</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 Code 3 est un modèle d’embeddings spécialisé dans la recherche de code source. L’éditeur décrit des tâches allant du langage naturel au code, du code au code et des docstrings au code : une question peut trouver une implémentation, un fragment de code peut trouver une logique apparentée et une description de fonction peut localiser du code pertinent. Le modèle produit des vecteurs pour la recherche, plutôt qu’un fichier modifié ou un programme terminé.</p><p>Préparez le contenu du dépôt autour d’unités de code significatives. Conservez une fonction avec son nom, sa signature et les commentaires qui expliquent son rôle. Pour un composant plus vaste, incluez les définitions voisines nécessaires à la compréhension de l’opération. Stockez séparément le dépôt, la révision, le chemin du fichier et l’emplacement des lignes, afin qu’un résultat de recherche ouvre exactement la source dont l’embedding a été créé.</p><p>Une recherche en langage naturel peut décrire un comportement, par exemple trouver la partie d’un projet qui valide un fichier téléversé avant de l’enregistrer. Une requête fondée sur du code peut fournir une fonction dont il faut retrouver un rôle correspondant ailleurs. Choisissez des recherches représentatives de tâches de développement réelles, notamment avec des noms peu familiers, des implémentations similaires et des fonctions utilitaires dont le sens dépend du code environnant.</p><p>La fenêtre de contexte de 32 000 jetons peut accueillir des passages de code volumineux. Utilisez cet espace à bon escient : une fonction complète et ses dépendances pertinentes peuvent être plus informatives qu’un bloc arbitraire coupé au milieu du flux de contrôle. Gardez une mise en forme lisible du code source et préservez la syntaxe du langage pendant l’extraction. Si un fichier source dépasse la fenêtre d’entrée, découpez-le à des limites structurelles utiles et conservez la relation entre les passages et leur fichier parent.</p><p>Voyage Code 3 prend en charge des embeddings de 2 048, 1 024, 512 ou 256 dimensions, ainsi que des représentations à virgule flottante, sur huit bits signés ou non signés, et binaires. Ces paramètres permettent différentes tailles d’index de dépôts et configurations de recherche. Évaluez une représentation compacte avec les mêmes recherches réelles que la référence plus grande, en vérifiant si la bonne fonction ou le bon fichier reste parmi les résultats utiles.</p><p>Pour un assistant de programmation, retrouvez d’abord les passages sources pertinents, puis fournissez ces passages et leurs références de fichiers au composant chargé de répondre ou d’effectuer une modification. Une correspondance par similarité aide à choisir le contexte ; elle n’établit pas que deux implémentations sont interchangeables. Examinez les entrées, les effets de bord et les contrats environnants dans le code retrouvé avant de vous en servir pour guider une modification.</p><p>Séparez les versions sans rapport d’un dépôt à l’aide de métadonnées et maintenez la traçabilité des révisions indexées. Si une fonction est déplacée ou que son comportement change, mettez à jour son vecteur et son emplacement source. Les mêmes paramètres d’embedding doivent décrire la source indexée et ses requêtes. Lors d’une migration d’index, comparez les résultats à l’ensemble de questions existant pour qu’un changement de modèle ou de représentation vectorielle ne modifie pas silencieusement le code présenté au développeur.</p><p>Les vérifications utiles consistent notamment à déterminer si une requête trouve l’implémentation réelle plutôt qu’un simple nom de test, si une docstring trouve sa fonction correspondante et si du code sémantiquement lié est distingué d’un fragment superficiellement similaire. Conservez le texte source renvoyé et son emplacement dans le résultat de recherche pour que les développeurs puissent examiner les éléments justificatifs. Les embeddings spécialisés dans le code deviennent ainsi un outil pratique de navigation et de sélection du contexte.</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>Entrée</dt><dd><code>text</code></dd></div><div><dt>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-code-3</div><div>Conditions: Utilisez le sélecteur de modèles Ailoot exact.</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 données retourné, ainsi que son indice.</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 retourné et son indice.</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 des jetons</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 · Jetons en entrée</span> <b>$0.0004</b> <span class=\"price-unit\">/ 1K jetons</span></div><div><span>Sortie · Jetons en sortie</span> <b>$0</b> <span class=\"price-unit\">/ 1K jetons</span></div><div><span>Entrée · Lecture du cache</span> <b>—</b> <span class=\"price-unit\">/ 1K jetons</span></div><div><span>Entrée · Écriture dans le cache</span> <b>—</b> <span class=\"price-unit\">/ 1K jetons</span></div><div><span>Entrée · Écriture dans le cache, 1 h</span> <b>—</b> <span class=\"price-unit\">/ 1K jetons</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-ca/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-2790-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2790-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · enregistrez tous les vecteurs et toutes 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-2790-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2790-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-code-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-code-3&amp;route=Ultra&amp;caller=voyage-code-3&amp;fmt=embeddings\"><code>voyage-code-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-code-3&amp;route=Ultra&amp;caller=voyage-code-3&amp;fmt=embeddings\"><code>voyage-code-3</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "voyage-code-3",
        "fmt": "embeddings",
        "http": "POST",
        "path": "/v1/embeddings",
        "request_model_id": "voyage-code-3",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|embeddings|/v1/embeddings|voyage-code-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 à 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 d’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 de modèles Ailoot exact.",
                "default_known": false,
                "enum": [
                  "voyage-code-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 données retourné, ainsi que son indice.",
                "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-code-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-code-3"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "conditions": [
              "Envoyez du texte avec le modèle sélectionné; conservez chaque vecteur retourné et son indice."
            ],
            "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 des jetons",
            "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-code-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-code-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-code-3",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "7ca9ffbf16629bb6cd94df9f141ef563d94648be1072fb8f4daf9108aa0294b8",
    "input_html_sha256": "916d530b24042fd2d8f8d9e299712aa4c2dc5fb3ce9134dde2d9b90e3b058f46",
    "private_audit_sha256": "e1b6ab79ef7a843cdc04e297d5fc37e1902cf47fcac25a19f85a1c858763f213",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/fr-ca/voyage-code-3/",
    "description": "Voyage Code 3 crée des embeddings pour retrouver du code à partir de texte, de code ou de docstrings. Une fenêtre de 32 000 jetons, des dimensions vectorielles sélectionnables et une sortie quantifiée prennent en charge la recherche dans les dépôts et la sélection de contexte de code pour les assistants de programmation.",
    "locale": "fr-ca",
    "md_url": "https://ailoot.ai/models/fr-ca/voyage-code-3/index.md",
    "title": "Voyage AI: Voyage Code 3 — Ailoot",
    "url": "https://ailoot.ai/models/fr-ca/voyage-code-3/"
  },
  "rawModel": {
    "about": "Voyage Code 3 est un modèle d’embeddings spécialisé dans la recherche de code source. L’éditeur décrit des tâches allant du langage naturel au code, du code au code et des docstrings au code : une question peut trouver une implémentation, un fragment de code peut trouver une logique apparentée et une description de fonction peut localiser du code pertinent. Le modèle produit des vecteurs pour la recherche, plutôt qu’un fichier modifié ou un programme terminé.\n\nPréparez le contenu du dépôt autour d’unités de code significatives. Conservez une fonction avec son nom, sa signature et les commentaires qui expliquent son rôle. Pour un composant plus vaste, incluez les définitions voisines nécessaires à la compréhension de l’opération. Stockez séparément le dépôt, la révision, le chemin du fichier et l’emplacement des lignes, afin qu’un résultat de recherche ouvre exactement la source dont l’embedding a été créé.\n\nUne recherche en langage naturel peut décrire un comportement, par exemple trouver la partie d’un projet qui valide un fichier téléversé avant de l’enregistrer. Une requête fondée sur du code peut fournir une fonction dont il faut retrouver un rôle correspondant ailleurs. Choisissez des recherches représentatives de tâches de développement réelles, notamment avec des noms peu familiers, des implémentations similaires et des fonctions utilitaires dont le sens dépend du code environnant.\n\nLa fenêtre de contexte de 32 000 jetons peut accueillir des passages de code volumineux. Utilisez cet espace à bon escient : une fonction complète et ses dépendances pertinentes peuvent être plus informatives qu’un bloc arbitraire coupé au milieu du flux de contrôle. Gardez une mise en forme lisible du code source et préservez la syntaxe du langage pendant l’extraction. Si un fichier source dépasse la fenêtre d’entrée, découpez-le à des limites structurelles utiles et conservez la relation entre les passages et leur fichier parent.\n\nVoyage Code 3 prend en charge des embeddings de 2 048, 1 024, 512 ou 256 dimensions, ainsi que des représentations à virgule flottante, sur huit bits signés ou non signés, et binaires. Ces paramètres permettent différentes tailles d’index de dépôts et configurations de recherche. Évaluez une représentation compacte avec les mêmes recherches réelles que la référence plus grande, en vérifiant si la bonne fonction ou le bon fichier reste parmi les résultats utiles.\n\nPour un assistant de programmation, retrouvez d’abord les passages sources pertinents, puis fournissez ces passages et leurs références de fichiers au composant chargé de répondre ou d’effectuer une modification. Une correspondance par similarité aide à choisir le contexte ; elle n’établit pas que deux implémentations sont interchangeables. Examinez les entrées, les effets de bord et les contrats environnants dans le code retrouvé avant de vous en servir pour guider une modification.\n\nSéparez les versions sans rapport d’un dépôt à l’aide de métadonnées et maintenez la traçabilité des révisions indexées. Si une fonction est déplacée ou que son comportement change, mettez à jour son vecteur et son emplacement source. Les mêmes paramètres d’embedding doivent décrire la source indexée et ses requêtes. Lors d’une migration d’index, comparez les résultats à l’ensemble de questions existant pour qu’un changement de modèle ou de représentation vectorielle ne modifie pas silencieusement le code présenté au développeur.\n\nLes vérifications utiles consistent notamment à déterminer si une requête trouve l’implémentation réelle plutôt qu’un simple nom de test, si une docstring trouve sa fonction correspondante et si du code sémantiquement lié est distingué d’un fragment superficiellement similaire. Conservez le texte source renvoyé et son emplacement dans le résultat de recherche pour que les développeurs puissent examiner les éléments justificatifs. Les embeddings spécialisés dans le code deviennent ainsi un outil pratique de navigation et de sélection du contexte.",
    "about_sha256": "7a62faecaa1a469a228fb832e8fd51d0fb1ee7fc0232e975614f45428c1f130f",
    "alias_of": null,
    "aliases": [],
    "author": "Voyage AI",
    "capabilities": {
      "context_length": 32000,
      "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 Code 3",
    "formats": [
      "embeddings"
    ],
    "id": "voyage-code-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 à 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 d’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 de modèles Ailoot exact.",
                "default_known": false,
                "enum": [
                  "voyage-code-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 données retourné, ainsi que son indice.",
                "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-code-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-code-3"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "conditions": [
              "Envoyez du texte avec le modèle sélectionné; conservez chaque vecteur retourné et son indice."
            ],
            "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 des jetons",
            "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-code-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-code-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-code-3",
        "request_model_id": "voyage-code-3",
        "route_label": "Ultra"
      }
    ],
    "name": "Voyage AI: Voyage Code 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 Code 3 crée des embeddings pour retrouver du code à partir de texte, de code ou de docstrings. Une fenêtre de 32 000 jetons, des dimensions vectorielles sélectionnables et une sortie quantifiée prennent en charge la recherche dans les dépôts et la sélection de contexte de code pour les assistants de programmation.",
    "short_sha256": "d4d092b4a7555efe0f233ac899b7e43901dde1d9465c4a647af52200c6d5d963"
  },
  "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 Code 3 crée des embeddings pour retrouver du code à partir de texte, de code ou de docstrings. Une fenêtre de 32 000 jetons, des dimensions vectorielles sélectionnables et une sortie quantifiée prennent en charge la recherche dans les dépôts et la sélection de contexte de code pour les assistants de programmation.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "c8e62daa888f76850856875d60ad17bb800fa795fe2e4c0c4d4bf04741107ece",
    "renderer_sha256": "98cb81b9c4ef4923c22e586170e7cdf67056351148a1666fb03dd6a4a26716a3"
  },
  "sourceRevision": "1ccccdc6386610d5d8a01481ccea725838e3a33fe86711c17583a208703c998e"
}
