{
  "aboutHtml": "<p>voyage-4 on Voyage AI:n Voyage 4 -perheen keskikokoinen tekstiupotusmalli. Se muuntaa kysely- ja asiakirjatekstin numeerisiksi vektoreiksi yleiskäyttöiseen ja monikieliseen tiedonhakuun. Perheen määrittävä kyky on yhteinen upotusavaruus: voyage-4, voyage-4-large, voyage-4-lite ja voyage-4-nano tuottavat yhteensopivat esitykset, joten hakutehtävän kysely- ja asiakirjapuoli voivat käyttää perheen eri malleja.</p><h4>Yhteinen avaruus ja epäsymmetrinen tiedonhaku</h4><p>Valmistaja kutsuu eri kysely- ja korpusmallien käyttöä epäsymmetriseksi tiedonhauksi. Yksi dokumentoitu malli on korpuksen valmistelu voyage-4-largella ja sen haku voyage-4:n kyselyupotuksilla. Korpus upotetaan kerran tai sen lähdemateriaalin muuttuessa, ja kyselyvektorit muodostetaan hakujen saapuessa. Yhteinen avaruus sallii kyselypuolen mallivalinnan muuttamisen perheen sisällä ilman korpuksen uudelleenupotusta pelkästään tämän vaihdon vuoksi.</p><p>Pidä tulosulottuvuus ja esitys yhteensopivina vertailtavissa vektoreissa. Yhteistä avaruutta koskeva lausuma koskee nimettyjä Voyage 4 -tekstimalleja; sitä eivät osoita pelkästään kahden toisiinsa liittymättömän mallin samanpituiset tulostaulukot. Käytännön tehtävä voi siis käyttää voyage-4:ää haun molemmilla puolilla tai sen kyselyvektoreita olemassa olevan voyage-4-large-asiakirjaindeksin kanssa, kun niiden esitysasetukset vastaavat toisiaan.</p><h4>Query- ja document-roolit</h4><p>Voyage suosittelee tiedonhaussa syötetekstin yksilöimistä query- tai document-tyyppiseksi. Syöteroolivalinta antaa vastaavan hakuohjeen ennen vektorisointia. Valmistele korpuskatkelmat asiakirjoiksi ja käyttäjän hakusanamuoto kyselyksi sekä säilytä todellinen lähdeteksti ja tunnisteet kunkin tallennetun vektorin rinnalla.</p><p>Esimerkiksi tietohakukokoelma voi indeksoida teknisiä ohjeita ja tuoteselityksiä. Epäonnistuneen tuonnin jälkeistä toimintaa koskevan kyselyn tulisi palauttaa sitä kuvaava lähdekatkelma. Säilytä otsikot, olennaiset ehdot ja lähdesijainti katkelman yhteydessä, jotta tuloksena syntyvä hakuosuma voidaan tutkia tai käyttää myöhemmässä RAG-vastausvaiheessa. Upotus on numeerinen hakuesitys; taustalla oleva katkelma on myöhemmän vaiheen evidenssi.</p><h4>Ulottuvuudet ja tulosdatatyypit</h4><p>Dokumentoitu tekstikohtainen konteksti-ikkuna on 32 000 tokenia. Valittavat ulottuvuudet ovat 256, 512, 1024 ja 2048, ja oletus on 1024. Matryoshka-oppiminen tuottaa nämä sisäkkäiset esityskoot. Tulos voi käyttää 32-bittisiä liukulukuja, etumerkillisiä tai etumerkittömiä 8-bittisiä kokonaislukuja tai pakattuja binääriarvoja perheen kvantisoinnin huomioivan valmistelun ansiosta.</p><p>Pakatussa binäärituloksessa jokainen palautettu tavu tallentaa kahdeksan upotusbittiä, joten tavuluettelon pituus on kahdeksasosa valitusta ulottuvuudesta. Tavumäärällä ja upotusulottuvuudella on eri merkitys. Valitse esitys, jonka hakuindeksisi voi tulkita, ja tutki ehdokkaiden relevanssia kokoelman todella käyttämillä kysymyksillä ja kielillä ennen pakatun kokoonpanon valintaa.</p><h4>Syötepituus, eräkäsittely ja katkaisu</h4><p>Valmistajan nykyinen tekstiupotusopas sallii voyage-4-pyynnössä enintään 1000 merkkijonoa ja yhteensä 320 000 tokenia. Eräbudjetti on erillään kunkin syötteen 32 000 tokenin ikkunasta. Katkaisu on oletusarvoisesti käytössä: liian pitkä teksti lyhennetään sopivaksi. Jos katkaisu poistetaan käytöstä, liian pitkä kohde tuottaa sen sijaan virheen.</p><p>Valmistele pitkästä raportista tai litteroinnista harkitusti vastauksen sisältäviä katkelmia sen sijaan, että luottaisit leikkaukseen syöterajalla. Pidä kukin katkelma liitettynä pääasiakirjaansa ja lähdeversioonsa. Tavalliset voyage-4-upotussyötteet ovat yksittäisiä tekstejä; kontekstualisoitu palaryhmien käsittely kuuluu erikseen dokumentoiduille kontekstuaalisille upotusmalleille.</p><h4>Käytä hakutulosta</h4><p>Tallenna vektorit katkelmatekstin ja vakaiden lähdetunnisteiden yhteyteen, vertaa kutakin kyselyvektoria yhteensopiviin asiakirjavektoreihin ja palauta ehdokaskatkelmat. Perheen julkaisussa arvioidaan tiedonhakua materiaalista, johon kuuluvat tekniset asiakirjat, keskustelut, pitkät asiakirjat, koodi, oikeudellinen ja taloudellinen aineisto sekä verkkoteksti. Erillinen uudelleenjärjestäjä voi tarkentaa ehdokkaita, ja myöhempi vastausvaihe voi käyttää niiden tekstiä. Arvioi palautetut katkelmat tehtävää vasten; yhteisen avaruuden yhteensopivuus mahdollistaa malliyhdistelmän, mutta tuloksen hyödyllisyys riippuu edelleen lähdemateriaalista ja kysymyksestä.</p>",
  "aboutText": "voyage-4 on Voyage AI:n Voyage 4 -perheen keskikokoinen tekstiupotusmalli. Se muuntaa kysely- ja asiakirjatekstin numeerisiksi vektoreiksi yleiskäyttöiseen ja monikieliseen tiedonhakuun. Perheen määrittävä kyky on yhteinen upotusavaruus: voyage-4, voyage-4-large, voyage-4-lite ja voyage-4-nano tuottavat yhteensopivat esitykset, joten hakutehtävän kysely- ja asiakirjapuoli voivat käyttää perheen eri malleja.\n\n### Yhteinen avaruus ja epäsymmetrinen tiedonhaku\n\nValmistaja kutsuu eri kysely- ja korpusmallien käyttöä epäsymmetriseksi tiedonhauksi. Yksi dokumentoitu malli on korpuksen valmistelu voyage-4-largella ja sen haku voyage-4:n kyselyupotuksilla. Korpus upotetaan kerran tai sen lähdemateriaalin muuttuessa, ja kyselyvektorit muodostetaan hakujen saapuessa. Yhteinen avaruus sallii kyselypuolen mallivalinnan muuttamisen perheen sisällä ilman korpuksen uudelleenupotusta pelkästään tämän vaihdon vuoksi.\n\nPidä tulosulottuvuus ja esitys yhteensopivina vertailtavissa vektoreissa. Yhteistä avaruutta koskeva lausuma koskee nimettyjä Voyage 4 -tekstimalleja; sitä eivät osoita pelkästään kahden toisiinsa liittymättömän mallin samanpituiset tulostaulukot. Käytännön tehtävä voi siis käyttää voyage-4:ää haun molemmilla puolilla tai sen kyselyvektoreita olemassa olevan voyage-4-large-asiakirjaindeksin kanssa, kun niiden esitysasetukset vastaavat toisiaan.\n\n### Query- ja document-roolit\n\nVoyage suosittelee tiedonhaussa syötetekstin yksilöimistä query- tai document-tyyppiseksi. Syöteroolivalinta antaa vastaavan hakuohjeen ennen vektorisointia. Valmistele korpuskatkelmat asiakirjoiksi ja käyttäjän hakusanamuoto kyselyksi sekä säilytä todellinen lähdeteksti ja tunnisteet kunkin tallennetun vektorin rinnalla.\n\nEsimerkiksi tietohakukokoelma voi indeksoida teknisiä ohjeita ja tuoteselityksiä. Epäonnistuneen tuonnin jälkeistä toimintaa koskevan kyselyn tulisi palauttaa sitä kuvaava lähdekatkelma. Säilytä otsikot, olennaiset ehdot ja lähdesijainti katkelman yhteydessä, jotta tuloksena syntyvä hakuosuma voidaan tutkia tai käyttää myöhemmässä RAG-vastausvaiheessa. Upotus on numeerinen hakuesitys; taustalla oleva katkelma on myöhemmän vaiheen evidenssi.\n\n### Ulottuvuudet ja tulosdatatyypit\n\nDokumentoitu tekstikohtainen konteksti-ikkuna on 32 000 tokenia. Valittavat ulottuvuudet ovat 256, 512, 1024 ja 2048, ja oletus on 1024. Matryoshka-oppiminen tuottaa nämä sisäkkäiset esityskoot. Tulos voi käyttää 32-bittisiä liukulukuja, etumerkillisiä tai etumerkittömiä 8-bittisiä kokonaislukuja tai pakattuja binääriarvoja perheen kvantisoinnin huomioivan valmistelun ansiosta.\n\nPakatussa binäärituloksessa jokainen palautettu tavu tallentaa kahdeksan upotusbittiä, joten tavuluettelon pituus on kahdeksasosa valitusta ulottuvuudesta. Tavumäärällä ja upotusulottuvuudella on eri merkitys. Valitse esitys, jonka hakuindeksisi voi tulkita, ja tutki ehdokkaiden relevanssia kokoelman todella käyttämillä kysymyksillä ja kielillä ennen pakatun kokoonpanon valintaa.\n\n### Syötepituus, eräkäsittely ja katkaisu\n\nValmistajan nykyinen tekstiupotusopas sallii voyage-4-pyynnössä enintään 1000 merkkijonoa ja yhteensä 320 000 tokenia. Eräbudjetti on erillään kunkin syötteen 32 000 tokenin ikkunasta. Katkaisu on oletusarvoisesti käytössä: liian pitkä teksti lyhennetään sopivaksi. Jos katkaisu poistetaan käytöstä, liian pitkä kohde tuottaa sen sijaan virheen.\n\nValmistele pitkästä raportista tai litteroinnista harkitusti vastauksen sisältäviä katkelmia sen sijaan, että luottaisit leikkaukseen syöterajalla. Pidä kukin katkelma liitettynä pääasiakirjaansa ja lähdeversioonsa. Tavalliset voyage-4-upotussyötteet ovat yksittäisiä tekstejä; kontekstualisoitu palaryhmien käsittely kuuluu erikseen dokumentoiduille kontekstuaalisille upotusmalleille.\n\n### Käytä hakutulosta\n\nTallenna vektorit katkelmatekstin ja vakaiden lähdetunnisteiden yhteyteen, vertaa kutakin kyselyvektoria yhteensopiviin asiakirjavektoreihin ja palauta ehdokaskatkelmat. Perheen julkaisussa arvioidaan tiedonhakua materiaalista, johon kuuluvat tekniset asiakirjat, keskustelut, pitkät asiakirjat, koodi, oikeudellinen ja taloudellinen aineisto sekä verkkoteksti. Erillinen uudelleenjärjestäjä voi tarkentaa ehdokkaita, ja myöhempi vastausvaihe voi käyttää niiden tekstiä. Arvioi palautetut katkelmat tehtävää vasten; yhteisen avaruuden yhteensopivuus mahdollistaa malliyhdistelmän, mutta tuloksen hyödyllisyys riippuu edelleen lähdemateriaalista ja kysymyksestä.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "aa55b8a56af9a16c8998db94f8a65905e5cb80ba375f6548761f51502dfc43b3",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "fi",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">VoyageAI by MongoDB: voyage-4</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Sulje\">×</button></div><div class=\"idline\"><span>VoyageAI by MongoDB /</span><code>voyageai/voyage-4</code><button type=\"button\" id=\"copy-id\">Kopioi ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Mallikortin osiot\"><button type=\"button\" data-card-jump=\"overview\">Aloitus</button><button type=\"button\" data-card-jump=\"methods\">Syötteet &amp; menetelmät</button><button type=\"button\" data-card-jump=\"pricing\">Hinnoittelu</button><button type=\"button\" data-card-jump=\"examples\">Esimerkit</button><button type=\"button\" data-card-jump=\"results\">Tulokset</button><button type=\"button\" data-card-jump=\"aliases\">Aliakset</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API-menetelmät\"><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|voyageai%2Fvoyage-4\">Vektoriesitykset</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\">Aloitus</h3><p class=\"mdesc-full\">voyage-4 upottaa tekstin yleiskäyttöiseen ja monikieliseen tiedonhakuun Voyage 4 -perheen yhteisessä vektoriavaruudessa. Se tukee 32 000 tokenin syötteitä, valittavia 256–2048-ulotteisia tuloksia ja query/document-rooleja hakuun sekä RAGiin.</p><dl class=\"card-io\" data-card-io><div><dt>Hyväksytyt syötteet</dt><dd>Teksti · token_ids</dd></div><div><dt>Tulokset</dt><dd>embedding</dd></div></dl><details class=\"card-about\"><summary>Tietoa mallista</summary><p class=\"note-s\" data-model-method-boundary>Tämä kuvaus kattaa mallin ominaisuudet. Ailootissa saatavilla olevat syötteet, tulosteet ja asetukset luetellaan alla valitulle menetelmälle.</p><div class=\"mabout\" id=\"m-about\"><p>voyage-4 on Voyage AI:n Voyage 4 -perheen keskikokoinen tekstiupotusmalli. Se muuntaa kysely- ja asiakirjatekstin numeerisiksi vektoreiksi yleiskäyttöiseen ja monikieliseen tiedonhakuun. Perheen määrittävä kyky on yhteinen upotusavaruus: voyage-4, voyage-4-large, voyage-4-lite ja voyage-4-nano tuottavat yhteensopivat esitykset, joten hakutehtävän kysely- ja asiakirjapuoli voivat käyttää perheen eri malleja.</p><h4>Yhteinen avaruus ja epäsymmetrinen tiedonhaku</h4><p>Valmistaja kutsuu eri kysely- ja korpusmallien käyttöä epäsymmetriseksi tiedonhauksi. Yksi dokumentoitu malli on korpuksen valmistelu voyage-4-largella ja sen haku voyage-4:n kyselyupotuksilla. Korpus upotetaan kerran tai sen lähdemateriaalin muuttuessa, ja kyselyvektorit muodostetaan hakujen saapuessa. Yhteinen avaruus sallii kyselypuolen mallivalinnan muuttamisen perheen sisällä ilman korpuksen uudelleenupotusta pelkästään tämän vaihdon vuoksi.</p><p>Pidä tulosulottuvuus ja esitys yhteensopivina vertailtavissa vektoreissa. Yhteistä avaruutta koskeva lausuma koskee nimettyjä Voyage 4 -tekstimalleja; sitä eivät osoita pelkästään kahden toisiinsa liittymättömän mallin samanpituiset tulostaulukot. Käytännön tehtävä voi siis käyttää voyage-4:ää haun molemmilla puolilla tai sen kyselyvektoreita olemassa olevan voyage-4-large-asiakirjaindeksin kanssa, kun niiden esitysasetukset vastaavat toisiaan.</p><h4>Query- ja document-roolit</h4><p>Voyage suosittelee tiedonhaussa syötetekstin yksilöimistä query- tai document-tyyppiseksi. Syöteroolivalinta antaa vastaavan hakuohjeen ennen vektorisointia. Valmistele korpuskatkelmat asiakirjoiksi ja käyttäjän hakusanamuoto kyselyksi sekä säilytä todellinen lähdeteksti ja tunnisteet kunkin tallennetun vektorin rinnalla.</p><p>Esimerkiksi tietohakukokoelma voi indeksoida teknisiä ohjeita ja tuoteselityksiä. Epäonnistuneen tuonnin jälkeistä toimintaa koskevan kyselyn tulisi palauttaa sitä kuvaava lähdekatkelma. Säilytä otsikot, olennaiset ehdot ja lähdesijainti katkelman yhteydessä, jotta tuloksena syntyvä hakuosuma voidaan tutkia tai käyttää myöhemmässä RAG-vastausvaiheessa. Upotus on numeerinen hakuesitys; taustalla oleva katkelma on myöhemmän vaiheen evidenssi.</p><h4>Ulottuvuudet ja tulosdatatyypit</h4><p>Dokumentoitu tekstikohtainen konteksti-ikkuna on 32 000 tokenia. Valittavat ulottuvuudet ovat 256, 512, 1024 ja 2048, ja oletus on 1024. Matryoshka-oppiminen tuottaa nämä sisäkkäiset esityskoot. Tulos voi käyttää 32-bittisiä liukulukuja, etumerkillisiä tai etumerkittömiä 8-bittisiä kokonaislukuja tai pakattuja binääriarvoja perheen kvantisoinnin huomioivan valmistelun ansiosta.</p><p>Pakatussa binäärituloksessa jokainen palautettu tavu tallentaa kahdeksan upotusbittiä, joten tavuluettelon pituus on kahdeksasosa valitusta ulottuvuudesta. Tavumäärällä ja upotusulottuvuudella on eri merkitys. Valitse esitys, jonka hakuindeksisi voi tulkita, ja tutki ehdokkaiden relevanssia kokoelman todella käyttämillä kysymyksillä ja kielillä ennen pakatun kokoonpanon valintaa.</p><h4>Syötepituus, eräkäsittely ja katkaisu</h4><p>Valmistajan nykyinen tekstiupotusopas sallii voyage-4-pyynnössä enintään 1000 merkkijonoa ja yhteensä 320 000 tokenia. Eräbudjetti on erillään kunkin syötteen 32 000 tokenin ikkunasta. Katkaisu on oletusarvoisesti käytössä: liian pitkä teksti lyhennetään sopivaksi. Jos katkaisu poistetaan käytöstä, liian pitkä kohde tuottaa sen sijaan virheen.</p><p>Valmistele pitkästä raportista tai litteroinnista harkitusti vastauksen sisältäviä katkelmia sen sijaan, että luottaisit leikkaukseen syöterajalla. Pidä kukin katkelma liitettynä pääasiakirjaansa ja lähdeversioonsa. Tavalliset voyage-4-upotussyötteet ovat yksittäisiä tekstejä; kontekstualisoitu palaryhmien käsittely kuuluu erikseen dokumentoiduille kontekstuaalisille upotusmalleille.</p><h4>Käytä hakutulosta</h4><p>Tallenna vektorit katkelmatekstin ja vakaiden lähdetunnisteiden yhteyteen, vertaa kutakin kyselyvektoria yhteensopiviin asiakirjavektoreihin ja palauta ehdokaskatkelmat. Perheen julkaisussa arvioidaan tiedonhakua materiaalista, johon kuuluvat tekniset asiakirjat, keskustelut, pitkät asiakirjat, koodi, oikeudellinen ja taloudellinen aineisto sekä verkkoteksti. Erillinen uudelleenjärjestäjä voi tarkentaa ehdokkaita, ja myöhempi vastausvaihe voi käyttää niiden tekstiä. Arvioi palautetut katkelmat tehtävää vasten; yhteisen avaruuden yhteensopivuus mahdollistaa malliyhdistelmän, mutta tuloksen hyödyllisyys riippuu edelleen lähdemateriaalista ja kysymyksestä.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Saatavilla Ailootissa · syötteet &amp; menetelmät</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Vektoriesitykset</b> <code>POST /v1/embeddings</code></summary><dl class=\"method-capabilities\"><div><dt>Syötetyypit</dt><dd><code>text</code>, <code>token_ids</code></dd></div><div><dt>Tulostyypit</dt><dd><code>embedding</code></dd></div><div><dt>Konteksti</dt><dd>32 000 tokens</dd></div><div><dt>Tulosteen muoto</dt><dd>json</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Kenttä</th><th>Tyyppi</th><th>Vaatimus</th><th>Arvot &amp; rajat</th><th>Oletus</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>string</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Pakollinen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>voyageai/voyage-4</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">input</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>string|string[]|integer[]|integer[][]</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Pakollinen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>Kohteiden vähimmäismäärä: 1</div><div>Ehdot: Ei-tyhjä, yhdenmukaisista alkioista koostuva erä. Tokenien ID:t ovat ei-negatiivisia kokonaislukuja.</div><div>Syötebudjetti: Enimmäismäärä: 32 000 · Tekstiyksikkö: UTF8-tavut · Tokenyksikkö: Token-taulukon alkiot</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">encoding_format</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>string</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Valinnainen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>float</div></td><td data-cell-label=\"Oletus\" data-default=\"known\"><span class=\"card-cell-label\">Oletus</span>float</td></tr><tr data-parameter-availability=\"unsupported\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">dimensions</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>integer</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Ei tuettu</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>Vähimmäismäärä: 1</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"pass_through_metadata\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">user</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>json_value</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Valinnainen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>Ehdot: Lähde sallii tämän JSON-metatietokentän; tarkka alkuperäisen palvelun semantiikka on mallikohtainen.</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"pass_through_metadata\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">session_id</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>json_value</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Valinnainen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>Ehdot: Lähde sallii tämän JSON-metatietokentän; tarkka alkuperäisen palvelun semantiikka on mallikohtainen.</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"pass_through_metadata\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">trace</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>json_value</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Valinnainen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>Ehdot: Lähde sallii tämän JSON-metatietokentän; tarkka alkuperäisen palvelun semantiikka on mallikohtainen.</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">provider</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>object</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Valinnainen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>Ehdot: provider.options hylätty</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Syöteaineistojen yhdistelmät</summary><p class=\"note-s\"><b>text_to_embedding</b></p></details><details class=\"note-s\" data-method-contract><summary>Menetelmän parametrit ja elinkaari</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parametri</th><th>Sopimus</th></tr></thead><tbody><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>content_type</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>application/json</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>required</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>model, input</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>input_shapes</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>string, string[], nonnegative_integer_token_array, nonnegative_integer_token_array[]</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>encoding_format</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>float</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>dimensions_override</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>false</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>max_input_budget_units</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>32000</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>multimodal_objects</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>false</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>material_types</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>text, token_ids</td></tr></tbody></table></div><p>Elinkaari: <code>synchronous_json</code></p><p class=\"note-s\">Säilytä jokaisen vektorin indeksi ja ulottuvuus.</p><p class=\"note-s\">Mallin nimen multimodaalisuus ei tarkoita, että tämä nimenomainen reitti hyväksyisi kuvaolioita.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Hinnoittelu</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Hintatiedot eivät lisää pyyntövalintoja. Tuetut parametrit on lueteltu valitulle menetelmälle.</p><dl data-price-conditions><dt>Nopea tila</dt><dd>Vakiohinta <span class=\"note-s\">Kun nopea tila on valittu</span></dd><dt>Flex-tila</dt><dd>Vakiohinta <span class=\"note-s\">Kun flex-tila on valittu</span></dd><dt>Päättelyn enimmäisteho</dt><dd>Vakiohinta <span class=\"note-s\">Kun päättelyn enimmäistehoon sovelletaan default-oletussäätöä</span></dd></dl></div><div data-declared-tariff-pricing><h4>Ailoot-hinnat</h4><h4>Hinnat asetusten mukaan</h4><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Asetukset</th><th>Hinnasto</th><th>Veloitus</th></tr></thead><tbody><tr><th data-cell-label=\"Asetukset\" scope=\"row\"><span class=\"card-cell-label\">Asetukset</span>Tokenien perushinnat</th><td data-cell-label=\"Hinnasto\"><span class=\"card-cell-label\">Hinnasto</span>Perushinta</td><td data-cell-label=\"Veloitus\"><span class=\"card-cell-label\">Veloitus</span><div><span>Syöte · Syötetokenit</span> <b>$0.00012</b> <span class=\"price-unit\">/ 1K tokenia</span></div><div><span>Tuloste · Tulostokenit</span> <b>$0</b> <span class=\"price-unit\">/ 1K tokenia</span></div><div><span>Syöte · Välimuistin luku</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenia</span></div><div><span>Syöte · Välimuistiin kirjoitus</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenia</span></div><div><span>Syöte · Välimuistiin kirjoitus, 1 tunti</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenia</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot varaa arvioidun summan ennen pyyntöä. Tuloksen jälkeen lopullinen veloitus toteutetaan mitatun käytön perusteella. Suoratoiston veloituksessa käytetään lopullista käyttötietuetta. <a href=\"/docs/fi/billing/reserve/\">Varauksen ja lopullisen veloituksen toiminta →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Esimerkkipyynnöt</h3><h4>Ailoot Ultra · Vektoriesitykset</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Koodivaihtoehdot\"><button class=\"cg-tab\" id=\"model-code-2701-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2701-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl</button><button class=\"cg-tab\" id=\"model-code-2701-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2701-panel-1\" aria-selected=\"false\" tabindex=\"-1\">Python SDK</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopioi koodi\"><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-2701-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2701-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;voyageai/voyage-4&quot;, &quot;input&quot;: [&quot;First document&quot;, &quot;Second document&quot;]}&#39;)\n\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/embeddings \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&quot;result.json&quot;).read_text())\nfor x in r.get(&quot;data&quot;,[]): print(json.dumps({&quot;index&quot;:x.get(&quot;index&quot;),&quot;embedding&quot;:x.get(&quot;embedding&quot;)}))\nPY_RESULT\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2701-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-2701-tab-1\" hidden><pre data-lang=\"python\"><code>from openai import OpenAI\nimport os\n\nclient=OpenAI(base_url=&quot;https://api.ailoot.ai/v1&quot;,api_key=os.environ[&quot;AILOOT_API_KEY&quot;],max_retries=0)\nresult=client.embeddings.create(model=&#39;voyageai/voyage-4&#39;,input=[&quot;First document&quot;,&quot;Second document&quot;])\nprint(result)\nfor item in result.data:print(item.index,item.embedding)\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Vastaanota ja tallenna tulokset</h3><h4>Ailoot Ultra · Vektoriesitykset</h4><p class=\"note-s\">json</p><div class=\"card-result-process\" data-all-results><h5>Säilytä kaikki valmistuneet tulokset</h5><p class=\"note-s\">Säilytä jokainen kokonainen palautettu vastaus, tiedosto ja sisällön osa.</p><p class=\"note-s\">Säilytä jokainen vektori indekseineen. Vektorien määrän on vastattava syötteiden määrää; ulottuvuuksien on oltava yhdenmukaiset.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Jos alkuperäinen vastaus on tarkistettava</h5><p class=\"note-s\">Uutta upotustehtävien päätepistettä ei oteta käyttöön.</p></div><details class=\"card-about\" data-output-fields><summary>Vastauksen kentät</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Kenttä</th><th>Tyyppi</th></tr></thead><tbody><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">object</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>string</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>string</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">data[].index</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>integer</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">data[].embedding</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>finite float[]</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>object</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Virheet ja seuraavat vaiheet</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Vastaus</th><th>Ehto</th><th>Seuraava vaihe</th></tr></thead><tbody><tr><th data-cell-label=\"Vastaus\" scope=\"row\"><span class=\"card-cell-label\">Vastaus</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Ehto\"><span class=\"card-cell-label\">Ehto</span>Virheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvo</td><td data-cell-label=\"Seuraava vaihe\"><span class=\"card-cell-label\">Seuraava vaihe</span>Korjaa ilmoitetut kentät ennen uutta luontipyyntöä.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliakset</h3><h4>Mallin aliakset</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=voyageai%2Fvoyage-4&amp;route=Ultra&amp;caller=voyageai%2Fvoyage-4&amp;fmt=embeddings\"><code>voyageai/voyage-4</code></a></span></p><h4>Menetelmäpolkujen aliakset</h4><p class=\"note-s\">Käytä yllä näytettyjä menetelmäpolkuja.</p><h4>Liittyvät kutsujan ID:t</h4><p class=\"note-s\"><a href=\"#m=voyageai%2Fvoyage-4&amp;route=Ultra&amp;caller=voyageai%2Fvoyage-4&amp;fmt=embeddings\"><code>voyageai/voyage-4</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "voyageai/voyage-4",
        "fmt": "embeddings",
        "http": "POST",
        "path": "/v1/embeddings",
        "request_model_id": "voyageai/voyage-4",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|embeddings|/v1/embeddings|voyageai%2Fvoyage-4",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Keep every vector with its index. Vector count must equal input count; dimensions must be consistent.",
            "errors": [
              {
                "code": null,
                "condition": "Virheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvo",
                "http_status": 400,
                "recovery": "Korjaa ilmoitetut kentät ennen uutta luontipyyntöä.",
                "type": "invalid_request_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "create": {
                "http": "POST",
                "path": "/v1/embeddings"
              },
              "job_read": null,
              "mode": "synchronous_json",
              "unknown": "Uutta upotustehtävien päätepistettä ei oteta käyttöön."
            },
            "material_combinations": [
              {
                "alternatives": [
                  "string",
                  "string[]",
                  "nonnegative_integer_token_array",
                  "nonnegative_integer_token_array[]"
                ],
                "mode": "text_to_embedding"
              }
            ],
            "operation_modes": [
              "single_embedding",
              "batched_embeddings"
            ],
            "outputs": {
              "all_results": "Säilytä jokainen vektori indekseineen. Vektorien määrän on vastattava syötteiden määrää; ulottuvuuksien on oltava yhdenmukaiset.",
              "default_dimensions": null,
              "family": "embedding",
              "fields": [
                {
                  "description": null,
                  "name": "object",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "model",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "data[].index",
                  "type": "integer"
                },
                {
                  "description": null,
                  "name": "data[].embedding",
                  "type": "finite float[]"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "json"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "voyageai/voyage-4"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "budget": {
                  "maximum": 32000,
                  "text_unit": "UTF8-tavut",
                  "token_unit": "Token-taulukon alkiot"
                },
                "conditions": "Ei-tyhjä, yhdenmukaisista alkioista koostuva erä. Tokenien ID:t ovat ei-negatiivisia kokonaislukuja.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "min_items": 1,
                "name": "input",
                "required": true,
                "type": "string|string[]|integer[]|integer[][]"
              },
              {
                "availability": "source_interface",
                "default": "float",
                "default_known": true,
                "enum": [
                  "float"
                ],
                "enum_known": true,
                "name": "encoding_format",
                "required": false,
                "type": "string"
              },
              {
                "availability": "unsupported",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minimum": 1,
                "name": "dimensions",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "pass_through_metadata",
                "conditions": "Lähde sallii tämän JSON-metatietokentän; tarkka alkuperäisen palvelun semantiikka on mallikohtainen.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "user",
                "required": false,
                "type": "json_value"
              },
              {
                "availability": "pass_through_metadata",
                "conditions": "Lähde sallii tämän JSON-metatietokentän; tarkka alkuperäisen palvelun semantiikka on mallikohtainen.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "session_id",
                "required": false,
                "type": "json_value"
              },
              {
                "availability": "pass_through_metadata",
                "conditions": "Lähde sallii tämän JSON-metatietokentän; tarkka alkuperäisen palvelun semantiikka on mallikohtainen.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "trace",
                "required": false,
                "type": "json_value"
              },
              {
                "availability": "source_interface",
                "conditions": "provider.options hylätty",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "mixed input kinds",
              "empty input",
              "image/audio/file objects",
              "encoding_format=base64",
              "dimensions override"
            ]
          },
          "hints": [
            "Säilytä jokaisen vektorin indeksi ja ulottuvuus.",
            "Mallin nimen multimodaalisuus ei tarkoita, että tämä nimenomainen reitti hyväksyisi kuvaolioita."
          ],
          "input": {
            "content_type": "application/json",
            "dimensions_override": false,
            "encoding_format": [
              "float"
            ],
            "input_shapes": [
              "string",
              "string[]",
              "nonnegative_integer_token_array",
              "nonnegative_integer_token_array[]"
            ],
            "material_types": [
              "text",
              "token_ids"
            ],
            "max_input_budget_units": 32000,
            "multimodal_objects": false,
            "required": [
              "model",
              "input"
            ]
          },
          "lifecycle": {
            "mode": "synchronous_json",
            "unknown": "no embedding job endpoint inferred"
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/embeddings"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_embedding"
          ],
          "output": {
            "default_dimensions": null,
            "family": "embedding",
            "format": "json",
            "http_success": 200,
            "vectors": "one dense float vector per input; indices/model/usage validated"
          }
        },
        "ctx": 32000,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Tokenien perushinnat",
            "units": [
              {
                "amount": "0.00012000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.00000012",
                "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}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"voyageai/voyage-4\", \"input\": [\"First document\", \"Second document\"]}')\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/embeddings \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path(\"result.json\").read_text())\nfor x in r.get(\"data\",[]): print(json.dumps({\"index\":x.get(\"index\"),\"embedding\":x.get(\"embedding\")}))\nPY_RESULT\n",
            "label": "curl · retained exact creation",
            "language": "bash"
          },
          {
            "code": "from openai import OpenAI\nimport os\n\nclient=OpenAI(base_url=\"https://api.ailoot.ai/v1\",api_key=os.environ[\"AILOOT_API_KEY\"],max_retries=0)\nresult=client.embeddings.create(model='voyageai/voyage-4',input=[\"First document\",\"Second document\"])\nprint(result)\nfor item in result.data:print(item.index,item.embedding)\n",
            "label": "Python SDK · all vectors",
            "language": "python"
          }
        ],
        "family": "openai",
        "fast_multiplier": 1,
        "flex_multiplier": 1,
        "fmt": "embeddings",
        "hints": [
          "Keep every vector index and dimension.",
          "Multimodal model name does not admit image objects on this exact path."
        ],
        "http": "POST",
        "in": 0.12,
        "input": [
          "text",
          "token_ids"
        ],
        "label": "Эмбеддинги",
        "max_out": null,
        "max_reasoning_effort_multiplier": 1,
        "method_aliases": [],
        "out": 0,
        "output": [
          "embedding"
        ],
        "path": "/v1/embeddings",
        "price_conditions": [
          {
            "label": "Nopea tila",
            "value": "Vakiohinta",
            "when": "Kun nopea tila on valittu"
          },
          {
            "label": "Flex-tila",
            "value": "Vakiohinta",
            "when": "Kun flex-tila on valittu"
          },
          {
            "label": "Päättelyn enimmäisteho",
            "value": "Vakiohinta",
            "when": "Kun päättelyn enimmäistehoon sovelletaan default-oletussäätöä"
          }
        ],
        "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.00012000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.00000012",
                "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": "voyageai/voyage-4",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [],
        "units": [
          {
            "amount": "0.00012000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.00000012",
            "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": "voyageai/voyage-4",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "d1816da5d43926977439666ce6ccf123e8dc7ea29735bd6070a5a7320a68d557",
    "input_html_sha256": "ece3803d351c25a0bbc2e977c808e87619b1e7e2358cba993c0f483a1ad0f3ce",
    "private_audit_sha256": "e10b31c382dc2cf505cac9c8ace8d9cf34250f9433d2442c1e406affbcff798f",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/fi/voyageai-voyage-4/",
    "description": "voyage-4 upottaa tekstin yleiskäyttöiseen ja monikieliseen tiedonhakuun Voyage 4 -perheen yhteisessä vektoriavaruudessa. Se tukee 32 000 tokenin syötteitä, valittavia 256–2048-ulotteisia tuloksia ja query/document-rooleja hakuun sekä RAGiin.",
    "locale": "fi",
    "md_url": "https://ailoot.ai/models/fi/voyageai-voyage-4/index.md",
    "title": "VoyageAI by MongoDB: voyage-4 — Ailoot",
    "url": "https://ailoot.ai/models/fi/voyageai-voyage-4/"
  },
  "rawModel": {
    "about": "voyage-4 on Voyage AI:n Voyage 4 -perheen keskikokoinen tekstiupotusmalli. Se muuntaa kysely- ja asiakirjatekstin numeerisiksi vektoreiksi yleiskäyttöiseen ja monikieliseen tiedonhakuun. Perheen määrittävä kyky on yhteinen upotusavaruus: voyage-4, voyage-4-large, voyage-4-lite ja voyage-4-nano tuottavat yhteensopivat esitykset, joten hakutehtävän kysely- ja asiakirjapuoli voivat käyttää perheen eri malleja.\n\n### Yhteinen avaruus ja epäsymmetrinen tiedonhaku\n\nValmistaja kutsuu eri kysely- ja korpusmallien käyttöä epäsymmetriseksi tiedonhauksi. Yksi dokumentoitu malli on korpuksen valmistelu voyage-4-largella ja sen haku voyage-4:n kyselyupotuksilla. Korpus upotetaan kerran tai sen lähdemateriaalin muuttuessa, ja kyselyvektorit muodostetaan hakujen saapuessa. Yhteinen avaruus sallii kyselypuolen mallivalinnan muuttamisen perheen sisällä ilman korpuksen uudelleenupotusta pelkästään tämän vaihdon vuoksi.\n\nPidä tulosulottuvuus ja esitys yhteensopivina vertailtavissa vektoreissa. Yhteistä avaruutta koskeva lausuma koskee nimettyjä Voyage 4 -tekstimalleja; sitä eivät osoita pelkästään kahden toisiinsa liittymättömän mallin samanpituiset tulostaulukot. Käytännön tehtävä voi siis käyttää voyage-4:ää haun molemmilla puolilla tai sen kyselyvektoreita olemassa olevan voyage-4-large-asiakirjaindeksin kanssa, kun niiden esitysasetukset vastaavat toisiaan.\n\n### Query- ja document-roolit\n\nVoyage suosittelee tiedonhaussa syötetekstin yksilöimistä query- tai document-tyyppiseksi. Syöteroolivalinta antaa vastaavan hakuohjeen ennen vektorisointia. Valmistele korpuskatkelmat asiakirjoiksi ja käyttäjän hakusanamuoto kyselyksi sekä säilytä todellinen lähdeteksti ja tunnisteet kunkin tallennetun vektorin rinnalla.\n\nEsimerkiksi tietohakukokoelma voi indeksoida teknisiä ohjeita ja tuoteselityksiä. Epäonnistuneen tuonnin jälkeistä toimintaa koskevan kyselyn tulisi palauttaa sitä kuvaava lähdekatkelma. Säilytä otsikot, olennaiset ehdot ja lähdesijainti katkelman yhteydessä, jotta tuloksena syntyvä hakuosuma voidaan tutkia tai käyttää myöhemmässä RAG-vastausvaiheessa. Upotus on numeerinen hakuesitys; taustalla oleva katkelma on myöhemmän vaiheen evidenssi.\n\n### Ulottuvuudet ja tulosdatatyypit\n\nDokumentoitu tekstikohtainen konteksti-ikkuna on 32 000 tokenia. Valittavat ulottuvuudet ovat 256, 512, 1024 ja 2048, ja oletus on 1024. Matryoshka-oppiminen tuottaa nämä sisäkkäiset esityskoot. Tulos voi käyttää 32-bittisiä liukulukuja, etumerkillisiä tai etumerkittömiä 8-bittisiä kokonaislukuja tai pakattuja binääriarvoja perheen kvantisoinnin huomioivan valmistelun ansiosta.\n\nPakatussa binäärituloksessa jokainen palautettu tavu tallentaa kahdeksan upotusbittiä, joten tavuluettelon pituus on kahdeksasosa valitusta ulottuvuudesta. Tavumäärällä ja upotusulottuvuudella on eri merkitys. Valitse esitys, jonka hakuindeksisi voi tulkita, ja tutki ehdokkaiden relevanssia kokoelman todella käyttämillä kysymyksillä ja kielillä ennen pakatun kokoonpanon valintaa.\n\n### Syötepituus, eräkäsittely ja katkaisu\n\nValmistajan nykyinen tekstiupotusopas sallii voyage-4-pyynnössä enintään 1000 merkkijonoa ja yhteensä 320 000 tokenia. Eräbudjetti on erillään kunkin syötteen 32 000 tokenin ikkunasta. Katkaisu on oletusarvoisesti käytössä: liian pitkä teksti lyhennetään sopivaksi. Jos katkaisu poistetaan käytöstä, liian pitkä kohde tuottaa sen sijaan virheen.\n\nValmistele pitkästä raportista tai litteroinnista harkitusti vastauksen sisältäviä katkelmia sen sijaan, että luottaisit leikkaukseen syöterajalla. Pidä kukin katkelma liitettynä pääasiakirjaansa ja lähdeversioonsa. Tavalliset voyage-4-upotussyötteet ovat yksittäisiä tekstejä; kontekstualisoitu palaryhmien käsittely kuuluu erikseen dokumentoiduille kontekstuaalisille upotusmalleille.\n\n### Käytä hakutulosta\n\nTallenna vektorit katkelmatekstin ja vakaiden lähdetunnisteiden yhteyteen, vertaa kutakin kyselyvektoria yhteensopiviin asiakirjavektoreihin ja palauta ehdokaskatkelmat. Perheen julkaisussa arvioidaan tiedonhakua materiaalista, johon kuuluvat tekniset asiakirjat, keskustelut, pitkät asiakirjat, koodi, oikeudellinen ja taloudellinen aineisto sekä verkkoteksti. Erillinen uudelleenjärjestäjä voi tarkentaa ehdokkaita, ja myöhempi vastausvaihe voi käyttää niiden tekstiä. Arvioi palautetut katkelmat tehtävää vasten; yhteisen avaruuden yhteensopivuus mahdollistaa malliyhdistelmän, mutta tuloksen hyödyllisyys riippuu edelleen lähdemateriaalista ja kysymyksestä.",
    "alias_of": null,
    "aliases": [],
    "author": "VoyageAI by MongoDB",
    "available": null,
    "canonical_model": "voyageai/voyage-4",
    "capabilities": {
      "context_length": 32000,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "embeddings"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.00012000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.00000012",
            "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": "Konfiguraation täydet hintatiedot lisätiedoissa."
      }
    ],
    "ctx": 32000,
    "entity_type": "model",
    "formats": [
      "embeddings"
    ],
    "id": "voyageai/voyage-4",
    "input": [
      "text",
      "token_ids"
    ],
    "kind": "embedding",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Keep every vector with its index. Vector count must equal input count; dimensions must be consistent.",
            "errors": [
              {
                "code": null,
                "condition": "Virheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvo",
                "http_status": 400,
                "recovery": "Korjaa ilmoitetut kentät ennen uutta luontipyyntöä.",
                "type": "invalid_request_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "create": {
                "http": "POST",
                "path": "/v1/embeddings"
              },
              "job_read": null,
              "mode": "synchronous_json",
              "unknown": "Uutta upotustehtävien päätepistettä ei oteta käyttöön."
            },
            "material_combinations": [
              {
                "alternatives": [
                  "string",
                  "string[]",
                  "nonnegative_integer_token_array",
                  "nonnegative_integer_token_array[]"
                ],
                "mode": "text_to_embedding"
              }
            ],
            "operation_modes": [
              "single_embedding",
              "batched_embeddings"
            ],
            "outputs": {
              "all_results": "Säilytä jokainen vektori indekseineen. Vektorien määrän on vastattava syötteiden määrää; ulottuvuuksien on oltava yhdenmukaiset.",
              "default_dimensions": null,
              "family": "embedding",
              "fields": [
                {
                  "description": null,
                  "name": "object",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "model",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "data[].index",
                  "type": "integer"
                },
                {
                  "description": null,
                  "name": "data[].embedding",
                  "type": "finite float[]"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "json"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "voyageai/voyage-4"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "budget": {
                  "maximum": 32000,
                  "text_unit": "UTF8-tavut",
                  "token_unit": "Token-taulukon alkiot"
                },
                "conditions": "Ei-tyhjä, yhdenmukaisista alkioista koostuva erä. Tokenien ID:t ovat ei-negatiivisia kokonaislukuja.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "min_items": 1,
                "name": "input",
                "required": true,
                "type": "string|string[]|integer[]|integer[][]"
              },
              {
                "availability": "source_interface",
                "default": "float",
                "default_known": true,
                "enum": [
                  "float"
                ],
                "enum_known": true,
                "name": "encoding_format",
                "required": false,
                "type": "string"
              },
              {
                "availability": "unsupported",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minimum": 1,
                "name": "dimensions",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "pass_through_metadata",
                "conditions": "Lähde sallii tämän JSON-metatietokentän; tarkka alkuperäisen palvelun semantiikka on mallikohtainen.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "user",
                "required": false,
                "type": "json_value"
              },
              {
                "availability": "pass_through_metadata",
                "conditions": "Lähde sallii tämän JSON-metatietokentän; tarkka alkuperäisen palvelun semantiikka on mallikohtainen.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "session_id",
                "required": false,
                "type": "json_value"
              },
              {
                "availability": "pass_through_metadata",
                "conditions": "Lähde sallii tämän JSON-metatietokentän; tarkka alkuperäisen palvelun semantiikka on mallikohtainen.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "trace",
                "required": false,
                "type": "json_value"
              },
              {
                "availability": "source_interface",
                "conditions": "provider.options hylätty",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "mixed input kinds",
              "empty input",
              "image/audio/file objects",
              "encoding_format=base64",
              "dimensions override"
            ]
          },
          "hints": [
            "Säilytä jokaisen vektorin indeksi ja ulottuvuus.",
            "Mallin nimen multimodaalisuus ei tarkoita, että tämä nimenomainen reitti hyväksyisi kuvaolioita."
          ],
          "input": {
            "content_type": "application/json",
            "dimensions_override": false,
            "encoding_format": [
              "float"
            ],
            "input_shapes": [
              "string",
              "string[]",
              "nonnegative_integer_token_array",
              "nonnegative_integer_token_array[]"
            ],
            "material_types": [
              "text",
              "token_ids"
            ],
            "max_input_budget_units": 32000,
            "multimodal_objects": false,
            "required": [
              "model",
              "input"
            ]
          },
          "lifecycle": {
            "mode": "synchronous_json",
            "unknown": "no embedding job endpoint inferred"
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/embeddings"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_embedding"
          ],
          "output": {
            "default_dimensions": null,
            "family": "embedding",
            "format": "json",
            "http_success": 200,
            "vectors": "one dense float vector per input; indices/model/usage validated"
          }
        },
        "ctx": 32000,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Tokenien perushinnat",
            "units": [
              {
                "amount": "0.00012000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.00000012",
                "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}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"voyageai/voyage-4\", \"input\": [\"First document\", \"Second document\"]}')\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/embeddings \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path(\"result.json\").read_text())\nfor x in r.get(\"data\",[]): print(json.dumps({\"index\":x.get(\"index\"),\"embedding\":x.get(\"embedding\")}))\nPY_RESULT\n",
            "label": "curl · retained exact creation",
            "language": "bash"
          },
          {
            "code": "from openai import OpenAI\nimport os\n\nclient=OpenAI(base_url=\"https://api.ailoot.ai/v1\",api_key=os.environ[\"AILOOT_API_KEY\"],max_retries=0)\nresult=client.embeddings.create(model='voyageai/voyage-4',input=[\"First document\",\"Second document\"])\nprint(result)\nfor item in result.data:print(item.index,item.embedding)\n",
            "label": "Python SDK · all vectors",
            "language": "python"
          }
        ],
        "family": "openai",
        "fast_multiplier": 1,
        "flex_multiplier": 1,
        "fmt": "embeddings",
        "hints": [
          "Keep every vector index and dimension.",
          "Multimodal model name does not admit image objects on this exact path."
        ],
        "http": "POST",
        "in": 0.12,
        "input": [
          "text",
          "token_ids"
        ],
        "label": "Эмбеддинги",
        "max_out": null,
        "max_reasoning_effort_multiplier": 1,
        "method_aliases": [],
        "out": 0,
        "output": [
          "embedding"
        ],
        "path": "/v1/embeddings",
        "price_conditions": [
          {
            "label": "Nopea tila",
            "value": "Vakiohinta",
            "when": "Kun nopea tila on valittu"
          },
          {
            "label": "Flex-tila",
            "value": "Vakiohinta",
            "when": "Kun flex-tila on valittu"
          },
          {
            "label": "Päättelyn enimmäisteho",
            "value": "Vakiohinta",
            "when": "Kun päättelyn enimmäistehoon sovelletaan default-oletussäätöä"
          }
        ],
        "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.00012000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.00000012",
                "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": "voyageai/voyage-4",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [],
        "units": [
          {
            "amount": "0.00012000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.00000012",
            "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": "voyageai/voyage-4",
        "request_model_id": "voyageai/voyage-4",
        "route_label": "Ultra"
      }
    ],
    "name": "VoyageAI by MongoDB: voyage-4",
    "price": {
      "in": 0.12,
      "in_label": null,
      "out": 0,
      "out_label": null,
      "scope_label": "Token rates",
      "sort_in": 0.12,
      "sort_out": 0,
      "varies": false
    },
    "pricing_profiles": [
      {
        "dimensions": {
          "regime": "base"
        },
        "label": "Эмбеддинги · Base token rates",
        "units": [
          {
            "amount": "0.00012000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.00000012",
            "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"
          }
        ]
      }
    ],
    "public_id": "voyageai/voyage-4",
    "short": "voyage-4 upottaa tekstin yleiskäyttöiseen ja monikieliseen tiedonhakuun Voyage 4 -perheen yhteisessä vektoriavaruudessa. Se tukee 32 000 tokenin syötteitä, valittavia 256–2048-ulotteisia tuloksia ja query/document-rooleja hakuun sekä RAGiin."
  },
  "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-4 upottaa tekstin yleiskäyttöiseen ja monikieliseen tiedonhakuun Voyage 4 -perheen yhteisessä vektoriavaruudessa. Se tukee 32 000 tokenin syötteitä, valittavia 256–2048-ulotteisia tuloksia ja query/document-rooleja hakuun sekä RAGiin.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "697a4b4bde665cf3e1a971f4da5b7f37bbf0dd028c3c8ebb8dd7024e9564579d",
    "renderer_sha256": "303a59603e2bc29ba8fda690e95fd32cec68de223d92e26054a88babff801dd7"
  },
  "sourceRevision": "fdaaa39acdb96864e0f877efbc41388736d644184fc962a280d35fbd89cdb17d"
}
