{
  "aboutHtml": "<p>Gemma 4 31B IT on Google DeepMindin avoimen Gemma 4 -perheen ohjeita seuraamaan hienosäädetty tiheä versio. Google painottaa 31B-mallissa laatua ja mukauttamista tehtävään, kun taas erillinen 26B A4B -versio käyttää asiantuntijasekoitusta tehokkaaseen päättelylaskentaan. Tämä kortti koskee nimettyä ohjehienosäädettyä 31B-versiota, ei sen esikoulutettuja painoja tai kvantisoitua johdannaista.</p><p>Virallisessa tiheän arkkitehtuurin taulukossa mainitaan 30.7 miljardia parametria, 60 kerrosta, 1,024 tokenin liukuva ikkuna ja 256K tokenin konteksti. Perhe yhdistää paikallisen liukuvan ikkunan attention-mekanismin globaaliin attention-mekanismiin, päättyy globaaliin kerrokseen ja käyttää tässä mallissa erillistä visuaalista enkooderia. Näin muodostuva kokonaisuus on suunniteltu teksti- ja kuvasyötteelle sekä tekstitulosteelle. Nämä ovat mallin arkkitehtuuritietoja; ne eivät määrää sovelluksen vastausaikaa tai tarkoita muiden Gemma 4 -kokojen äänituen sisältymistä tähän malliin.</p><p>256K tokenin konteksti soveltuu tehtäviin, joissa laaja tekstiaineisto yhdistyy kuvalliseen näyttöön. Kuvia ja tekstiä voi vuorotella samassa kehotteessa; valmistaja suosittelee sijoittamaan kuvan ennen siihen liittyvää tekstiä parhaan tuloksen saavuttamiseksi. Kuvallisiin tehtäviin kuuluvat kohteiden tunnistus, asiakirjasivujen tulkinta, näyttöjen ja käyttöliittymien ymmärtäminen, kaaviot, monikielinen OCR, käsinkirjoitus ja kuvakohtien osoittaminen. Tuloste on tekstiä: poimittua sisältöä, selitys, koodia tai ehdotus työkalutoiminnoksi.</p><p>Säädettävän ajattelun avulla malli voi päätellä ennen vastaamista tai vastata suoraan. Gemma 4 lisää natiivin system-roolin user- ja assistant-roolien rinnalle. Googlen kehoteformaatti ottaa ajattelun käyttöön järjestelmäkehotteen &lt;|think|&gt;-ohjaustokenilla ja erottaa ajattelukanavan lopullisesta vastauksesta; dokumentoitu prosessori osaa käsitellä tätä mallipohjaa. Säilytä monivaiheisen keskustelun historiassa aiemmat lopulliset vastaukset ja jätä aiemmat ajatuskulut pois. Poikkeuksena ovat työkalukutsuja sisältävät vuorot, joissa ne tulee valmistajan mukaan säilyttää.</p><p>Natiivi Function Calling tukee työkalujen jäsenneltyä käyttöä, ja Googlen julkaisukuvaus dokumentoi myös rakenteisen JSON-tulostuksen. Määrittele tehtävä, käytettävissä oleva funktio ja odotettu tulos; sovellus suorittaa pyydetyn toiminnon ja palauttaa sen tuloksen seuraavaa vaihetta varten. Kooditehtävässä voi pyytää koodin luomista, täydentämistä tai korjaamista, ja kuvallinen avustaja voi selittää kaavion tai näytön palautetun tekstin avulla. Funktiokutsupyyntö on eri asia kuin yhdistetty toiminto, joka on jo suoritettu.</p><p>Kuvan vaihtelevaa tarkkuutta ohjataan visuaalisten tokenien budjetilla. Dokumentoidut vaihtoehdot ovat 70, 140, 280, 560 ja 1,120 tokenia. Pienemmät budjetit sopivat luokitteluun ja kuvateksteihin; suuremmat säilyttävät enemmän yksityiskohtia OCR:ää, asiakirjojen jäsentämistä ja pientä tekstiä varten mutta vaativat enemmän laskentaa. Päätä ennen kuvan valmistelua, tarvitsetko yleiskuvan vai täsmälliset kirjaimet. Selkeä rajaus etiketistä voi auttaa poimintatehtävässä enemmän kuin avoin pyyntö tutkia kokonaisen sivun jokainen yksityiskohta.</p><p>Google suosittelee malliperheen näytteistysasetuksiksi temperature 1.0, top-p 0.95 ja top-k 64. Mallikortti erottaa yli 140 kielellä tehdyn koulutuksen yli 35 kielen valmiista tuesta. Ilmoita vastauskieli ja säilytä verkkotunnukset, kenttien nimet tai kaavat nimenomaisesti tehtävänantoon. 256K on kontekstia koskeva määritys; viitattu mallikortti ei määritä tälle versiolle erillistä yleispätevää tulosteen enimmäispituutta.</p><p>Anna asiakirja- ja kooditehtävään kyseisen sivun kuva, kirjallinen vaatimus ja lähdekoodikatkelma: ”Lue merkinnät, selitä, miten tämä näkymä eroaa määrittelystä, ja ehdota annettuun koodiin rajattu korjaus.” Pyydä kaaviota koskevassa vastauksessa erottamaan näkyvät arvot päätellystä kehityssuunnasta. Gemman mallikortti mainitsee rajoitteita, jotka liittyvät monitulkintaiseen kieleen, erittäin monimutkaisiin tehtäviin sekä virheellisiin tai vanhentuneisiin faktaväitteisiin. Liitä siksi mukaan ne luotettavat faktat, joita tuloksessa on käytettävä, äläkä odota koulutustiedon tarjoavan niitä.</p><p>Valitse Ailootissa tämä täsmällinen mallitunnus /v1/chat/completions-pyynnössä ja anna tehtävä messages-kentässä. Jokaisessa viestissä on role ja content; pidä olennainen ohje ja lähdeaineisto yhdessä. Kerää koko JSON-vastaus tai kaikki SSE-osat, kun stream on käytössä, ja säilytä usage-tiedot kirjallisen tuloksen yhteydessä.</p>",
  "aboutText": "Gemma 4 31B IT on Google DeepMindin avoimen Gemma 4 -perheen ohjeita seuraamaan hienosäädetty tiheä versio. Google painottaa 31B-mallissa laatua ja mukauttamista tehtävään, kun taas erillinen 26B A4B -versio käyttää asiantuntijasekoitusta tehokkaaseen päättelylaskentaan. Tämä kortti koskee nimettyä ohjehienosäädettyä 31B-versiota, ei sen esikoulutettuja painoja tai kvantisoitua johdannaista.\n\nVirallisessa tiheän arkkitehtuurin taulukossa mainitaan 30.7 miljardia parametria, 60 kerrosta, 1,024 tokenin liukuva ikkuna ja 256K tokenin konteksti. Perhe yhdistää paikallisen liukuvan ikkunan attention-mekanismin globaaliin attention-mekanismiin, päättyy globaaliin kerrokseen ja käyttää tässä mallissa erillistä visuaalista enkooderia. Näin muodostuva kokonaisuus on suunniteltu teksti- ja kuvasyötteelle sekä tekstitulosteelle. Nämä ovat mallin arkkitehtuuritietoja; ne eivät määrää sovelluksen vastausaikaa tai tarkoita muiden Gemma 4 -kokojen äänituen sisältymistä tähän malliin.\n\n256K tokenin konteksti soveltuu tehtäviin, joissa laaja tekstiaineisto yhdistyy kuvalliseen näyttöön. Kuvia ja tekstiä voi vuorotella samassa kehotteessa; valmistaja suosittelee sijoittamaan kuvan ennen siihen liittyvää tekstiä parhaan tuloksen saavuttamiseksi. Kuvallisiin tehtäviin kuuluvat kohteiden tunnistus, asiakirjasivujen tulkinta, näyttöjen ja käyttöliittymien ymmärtäminen, kaaviot, monikielinen OCR, käsinkirjoitus ja kuvakohtien osoittaminen. Tuloste on tekstiä: poimittua sisältöä, selitys, koodia tai ehdotus työkalutoiminnoksi.\n\nSäädettävän ajattelun avulla malli voi päätellä ennen vastaamista tai vastata suoraan. Gemma 4 lisää natiivin system-roolin user- ja assistant-roolien rinnalle. Googlen kehoteformaatti ottaa ajattelun käyttöön järjestelmäkehotteen <|think|>-ohjaustokenilla ja erottaa ajattelukanavan lopullisesta vastauksesta; dokumentoitu prosessori osaa käsitellä tätä mallipohjaa. Säilytä monivaiheisen keskustelun historiassa aiemmat lopulliset vastaukset ja jätä aiemmat ajatuskulut pois. Poikkeuksena ovat työkalukutsuja sisältävät vuorot, joissa ne tulee valmistajan mukaan säilyttää.\n\nNatiivi Function Calling tukee työkalujen jäsenneltyä käyttöä, ja Googlen julkaisukuvaus dokumentoi myös rakenteisen JSON-tulostuksen. Määrittele tehtävä, käytettävissä oleva funktio ja odotettu tulos; sovellus suorittaa pyydetyn toiminnon ja palauttaa sen tuloksen seuraavaa vaihetta varten. Kooditehtävässä voi pyytää koodin luomista, täydentämistä tai korjaamista, ja kuvallinen avustaja voi selittää kaavion tai näytön palautetun tekstin avulla. Funktiokutsupyyntö on eri asia kuin yhdistetty toiminto, joka on jo suoritettu.\n\nKuvan vaihtelevaa tarkkuutta ohjataan visuaalisten tokenien budjetilla. Dokumentoidut vaihtoehdot ovat 70, 140, 280, 560 ja 1,120 tokenia. Pienemmät budjetit sopivat luokitteluun ja kuvateksteihin; suuremmat säilyttävät enemmän yksityiskohtia OCR:ää, asiakirjojen jäsentämistä ja pientä tekstiä varten mutta vaativat enemmän laskentaa. Päätä ennen kuvan valmistelua, tarvitsetko yleiskuvan vai täsmälliset kirjaimet. Selkeä rajaus etiketistä voi auttaa poimintatehtävässä enemmän kuin avoin pyyntö tutkia kokonaisen sivun jokainen yksityiskohta.\n\nGoogle suosittelee malliperheen näytteistysasetuksiksi temperature 1.0, top-p 0.95 ja top-k 64. Mallikortti erottaa yli 140 kielellä tehdyn koulutuksen yli 35 kielen valmiista tuesta. Ilmoita vastauskieli ja säilytä verkkotunnukset, kenttien nimet tai kaavat nimenomaisesti tehtävänantoon. 256K on kontekstia koskeva määritys; viitattu mallikortti ei määritä tälle versiolle erillistä yleispätevää tulosteen enimmäispituutta.\n\nAnna asiakirja- ja kooditehtävään kyseisen sivun kuva, kirjallinen vaatimus ja lähdekoodikatkelma: ”Lue merkinnät, selitä, miten tämä näkymä eroaa määrittelystä, ja ehdota annettuun koodiin rajattu korjaus.” Pyydä kaaviota koskevassa vastauksessa erottamaan näkyvät arvot päätellystä kehityssuunnasta. Gemman mallikortti mainitsee rajoitteita, jotka liittyvät monitulkintaiseen kieleen, erittäin monimutkaisiin tehtäviin sekä virheellisiin tai vanhentuneisiin faktaväitteisiin. Liitä siksi mukaan ne luotettavat faktat, joita tuloksessa on käytettävä, äläkä odota koulutustiedon tarjoavan niitä.\n\nValitse Ailootissa tämä täsmällinen mallitunnus /v1/chat/completions-pyynnössä ja anna tehtävä messages-kentässä. Jokaisessa viestissä on role ja content; pidä olennainen ohje ja lähdeaineisto yhdessä. Kerää koko JSON-vastaus tai kaikki SSE-osat, kun stream on käytössä, ja säilytä usage-tiedot kirjallisen tuloksen yhteydessä.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "de477462401908884d7f483201d2d63a355ee8b125ab50fb76da320399113603",
    "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\">G</span><h2 id=\"sheet-title\">Google: Gemma 4 31B (free)</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Sulje\">×</button></div><div class=\"idline\"><span>Google /</span><code>google/gemma-4-31b-it:free</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|chat|/v1/chat/completions|google%2Fgemma-4-31b-it%3Afree\">Chat</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\">Gemma 4 31B IT on Googlen ohjeita seuraamaan hienosäädetty tiheä malli tekstipohjaiseen ja visuaaliseen päättelyyn. Sen 256K konteksti, säädettävä ajattelu, kuvien ymmärtäminen ja natiivit funktiokutsut tukevat koodi-, asiakirja- ja agenttitehtäviä, joiden tuloste on tekstiä.</p><dl class=\"card-io\" data-card-io><div><dt>Hyväksytyt syötteet</dt><dd>Teksti · Kuvat</dd></div><div><dt>Tulokset</dt><dd>Teksti</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>Gemma 4 31B IT on Google DeepMindin avoimen Gemma 4 -perheen ohjeita seuraamaan hienosäädetty tiheä versio. Google painottaa 31B-mallissa laatua ja mukauttamista tehtävään, kun taas erillinen 26B A4B -versio käyttää asiantuntijasekoitusta tehokkaaseen päättelylaskentaan. Tämä kortti koskee nimettyä ohjehienosäädettyä 31B-versiota, ei sen esikoulutettuja painoja tai kvantisoitua johdannaista.</p><p>Virallisessa tiheän arkkitehtuurin taulukossa mainitaan 30.7 miljardia parametria, 60 kerrosta, 1,024 tokenin liukuva ikkuna ja 256K tokenin konteksti. Perhe yhdistää paikallisen liukuvan ikkunan attention-mekanismin globaaliin attention-mekanismiin, päättyy globaaliin kerrokseen ja käyttää tässä mallissa erillistä visuaalista enkooderia. Näin muodostuva kokonaisuus on suunniteltu teksti- ja kuvasyötteelle sekä tekstitulosteelle. Nämä ovat mallin arkkitehtuuritietoja; ne eivät määrää sovelluksen vastausaikaa tai tarkoita muiden Gemma 4 -kokojen äänituen sisältymistä tähän malliin.</p><p>256K tokenin konteksti soveltuu tehtäviin, joissa laaja tekstiaineisto yhdistyy kuvalliseen näyttöön. Kuvia ja tekstiä voi vuorotella samassa kehotteessa; valmistaja suosittelee sijoittamaan kuvan ennen siihen liittyvää tekstiä parhaan tuloksen saavuttamiseksi. Kuvallisiin tehtäviin kuuluvat kohteiden tunnistus, asiakirjasivujen tulkinta, näyttöjen ja käyttöliittymien ymmärtäminen, kaaviot, monikielinen OCR, käsinkirjoitus ja kuvakohtien osoittaminen. Tuloste on tekstiä: poimittua sisältöä, selitys, koodia tai ehdotus työkalutoiminnoksi.</p><p>Säädettävän ajattelun avulla malli voi päätellä ennen vastaamista tai vastata suoraan. Gemma 4 lisää natiivin system-roolin user- ja assistant-roolien rinnalle. Googlen kehoteformaatti ottaa ajattelun käyttöön järjestelmäkehotteen &lt;|think|&gt;-ohjaustokenilla ja erottaa ajattelukanavan lopullisesta vastauksesta; dokumentoitu prosessori osaa käsitellä tätä mallipohjaa. Säilytä monivaiheisen keskustelun historiassa aiemmat lopulliset vastaukset ja jätä aiemmat ajatuskulut pois. Poikkeuksena ovat työkalukutsuja sisältävät vuorot, joissa ne tulee valmistajan mukaan säilyttää.</p><p>Natiivi Function Calling tukee työkalujen jäsenneltyä käyttöä, ja Googlen julkaisukuvaus dokumentoi myös rakenteisen JSON-tulostuksen. Määrittele tehtävä, käytettävissä oleva funktio ja odotettu tulos; sovellus suorittaa pyydetyn toiminnon ja palauttaa sen tuloksen seuraavaa vaihetta varten. Kooditehtävässä voi pyytää koodin luomista, täydentämistä tai korjaamista, ja kuvallinen avustaja voi selittää kaavion tai näytön palautetun tekstin avulla. Funktiokutsupyyntö on eri asia kuin yhdistetty toiminto, joka on jo suoritettu.</p><p>Kuvan vaihtelevaa tarkkuutta ohjataan visuaalisten tokenien budjetilla. Dokumentoidut vaihtoehdot ovat 70, 140, 280, 560 ja 1,120 tokenia. Pienemmät budjetit sopivat luokitteluun ja kuvateksteihin; suuremmat säilyttävät enemmän yksityiskohtia OCR:ää, asiakirjojen jäsentämistä ja pientä tekstiä varten mutta vaativat enemmän laskentaa. Päätä ennen kuvan valmistelua, tarvitsetko yleiskuvan vai täsmälliset kirjaimet. Selkeä rajaus etiketistä voi auttaa poimintatehtävässä enemmän kuin avoin pyyntö tutkia kokonaisen sivun jokainen yksityiskohta.</p><p>Google suosittelee malliperheen näytteistysasetuksiksi temperature 1.0, top-p 0.95 ja top-k 64. Mallikortti erottaa yli 140 kielellä tehdyn koulutuksen yli 35 kielen valmiista tuesta. Ilmoita vastauskieli ja säilytä verkkotunnukset, kenttien nimet tai kaavat nimenomaisesti tehtävänantoon. 256K on kontekstia koskeva määritys; viitattu mallikortti ei määritä tälle versiolle erillistä yleispätevää tulosteen enimmäispituutta.</p><p>Anna asiakirja- ja kooditehtävään kyseisen sivun kuva, kirjallinen vaatimus ja lähdekoodikatkelma: ”Lue merkinnät, selitä, miten tämä näkymä eroaa määrittelystä, ja ehdota annettuun koodiin rajattu korjaus.” Pyydä kaaviota koskevassa vastauksessa erottamaan näkyvät arvot päätellystä kehityssuunnasta. Gemman mallikortti mainitsee rajoitteita, jotka liittyvät monitulkintaiseen kieleen, erittäin monimutkaisiin tehtäviin sekä virheellisiin tai vanhentuneisiin faktaväitteisiin. Liitä siksi mukaan ne luotettavat faktat, joita tuloksessa on käytettävä, äläkä odota koulutustiedon tarjoavan niitä.</p><p>Valitse Ailootissa tämä täsmällinen mallitunnus /v1/chat/completions-pyynnössä ja anna tehtävä messages-kentässä. Jokaisessa viestissä on role ja content; pidä olennainen ohje ja lähdeaineisto yhdessä. Kerää koko JSON-vastaus tai kaikki SSE-osat, kun stream on käytössä, ja säilytä usage-tiedot kirjallisen tuloksen yhteydessä.</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 · OpenAI Chat</b> <code>POST /v1/chat/completions</code></summary><dl class=\"method-capabilities\"><div><dt>Syötetyypit</dt><dd><code>text</code>, <code>image</code></dd></div><div><dt>Tulostyypit</dt><dd><code>text</code></dd></div><div><dt>Tulosteen muoto</dt><dd>JSON or SSE</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><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>google/gemma-4-31b-it:free</div><div>Ehdot: Käytä täsmälleen tätä Ailoot-reititysvalitsinta.</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">messages</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>array</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>Ehdot: </div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">stream</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>boolean</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: </div></td><td data-cell-label=\"Oletus\" data-default=\"known\"><span class=\"card-cell-label\">Oletus</span>false</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Syöteaineistojen yhdistelmät</summary><p class=\"note-s\"><b>text_input</b> · Pakollinen: messages</p><p class=\"note-s\"><b>image_with_text</b> · Pakollinen: messages with actual image content blocks</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, messages</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>optional</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>stream</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, image</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>conditions</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>Käytä täsmälleen tätä Ailoot-reititysvalitsinta., Tämä protokolla välittää kuvasisältöä, kun juuri valittu malli tukee kuvien tulkintaa. Protokollan hyväksyminen ei osoita kaikkien mallien tukevan kuvia.</td></tr></tbody></table></div><p>Menetelmien aliakset: <code>/chat/completions</code></p><p>Elinkaari: <code>synchronous_or_streamed</code></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><dt>Eksplisiittisen välimuistin hinnoittelu</dt><dd>Ei käytössä <span class=\"note-s\">Kun eksplisiittistä välimuistia pyydetään</span></dd><dt>Nollahinnat pelkälle tekstille</dt><dd>Välimuistiin, työkaluihin ja mediaan sovelletaan niiden erikseen lueteltuja hinnoitteluehtoja. <span class=\"note-s\">Pelkkää tekstiä sisältävälle syötteelle ja tulosteelle</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</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 · OpenAI Chat</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-2927-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2927-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · luo vain kerran ja säilytä koko tulos</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-2927-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2927-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\nexport AILOOT_API_KEY\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;google/gemma-4-31b-it:free&quot;, &quot;messages&quot;: [{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;Explain how a rainbow forms.&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/chat/completions \\\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\n# Submit once. Retain the complete result, original identifiers and every response header.\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 · OpenAI Chat</h4><p class=\"note-s\">JSON or SSE</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 sisältölohko, työkalukutsun tunniste, mahdollinen palautettu ajatteluallekirjoitus, kaikki SSE-muutokset ja täydelliset käyttötiedot. Ensimmäinen tekstikatkelma ei ole koko tulos.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Jos alkuperäinen vastaus on tarkistettava</h5><p class=\"note-s\">Säilytä alkuperäinen X-Client-Request-ID, vastaus ja otsakkeet. Tuntematon tulos tai result_pending_check ei oikeuta toiseen luontipyyntöö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\">choices[]</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>object</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>Pakollinen kenttä, mallivalitsin, tyyppi tai syötteen esitysmuoto on virheellinen.</td><td data-cell-label=\"Seuraava vaihe\"><span class=\"card-cell-label\">Seuraava vaihe</span>Tarkista palautetut validointitiedot ennen erillisen pyynnön valmistelua.</td></tr><tr><th data-cell-label=\"Vastaus\" scope=\"row\"><span class=\"card-cell-label\">Vastaus</span><code></code></th><td data-cell-label=\"Ehto\"><span class=\"card-cell-label\">Ehto</span>Alkuperäinen pyyntö tai tulos on tuntematon tai vaatii tarkistuksen.</td><td data-cell-label=\"Seuraava vaihe\"><span class=\"card-cell-label\">Seuraava vaihe</span>Säilytä alkuperäiset tunnisteet ja otsakkeet; lue vain tuettuja tila- tai kirjastotietueita. Älä lähetä luontipyyntöä uudelleen.</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=google%2Fgemma-4-31b-it%3Afree&amp;route=Ultra&amp;caller=google%2Fgemma-4-31b-it%3Afree&amp;fmt=chat\"><code>google/gemma-4-31b-it:free</code></a></span></p><h4>Menetelmäpolkujen aliakset</h4><p class=\"note-s\"><code>/chat/completions</code></p><h4>Liittyvät kutsujan ID:t</h4><p class=\"note-s\"><a href=\"#m=google%2Fgemma-4-31b-it%3Afree&amp;route=Ultra&amp;caller=google%2Fgemma-4-31b-it%3Afree&amp;fmt=chat\"><code>google/gemma-4-31b-it:free</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "google/gemma-4-31b-it:free",
        "fmt": "chat",
        "http": "POST",
        "path": "/v1/chat/completions",
        "request_model_id": "google/gemma-4-31b-it:free",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|chat|/v1/chat/completions|google%2Fgemma-4-31b-it%3Afree",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "accepted_material_guidance": {
              "content_type": "application/json",
              "example_scope": "The preserved text example is one valid request form, not the full protocol input set.",
              "image_condition": "Image content is carried by this protocol where the exact selected model supports vision. Protocol admission does not establish image capability for every model.",
              "material_types": [
                "text",
                "image"
              ],
              "text_file_material": "Actual UTF-8 text can be inserted in a text content part."
            },
            "all_results": "Retain the complete response and headers, original identifiers, every actual output and all usage/accounting fields. Save each unique owned asset and retain every role pointing to it.",
            "authentication": {
              "header": "Authorization",
              "scheme": "Bearer",
              "value": "$AILOOT_API_KEY"
            },
            "errors": [
              {
                "condition": "Pakollinen kenttä, mallivalitsin, tyyppi tai syötteen esitysmuoto on virheellinen.",
                "http_status": 400,
                "recovery": "Tarkista palautetut validointitiedot ennen erillisen pyynnön valmistelua.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Alkuperäinen pyyntö tai tulos on tuntematon tai vaatii tarkistuksen.",
                "http_status": null,
                "recovery": "Säilytä alkuperäiset tunnisteet ja otsakkeet; lue vain tuettuja tila- tai kirjastotietueita. Älä lähetä luontipyyntöä uudelleen.",
                "type": null
              }
            ],
            "lifecycle": {
              "cancel_endpoint": null,
              "create": {
                "http": "POST",
                "path": "/v1/chat/completions"
              },
              "mode": "synchronous_or_streamed",
              "status": [],
              "unknown": "Säilytä alkuperäinen X-Client-Request-ID, vastaus ja otsakkeet. Tuntematon tulos tai result_pending_check ei oikeuta toiseen luontipyyntöön.",
              "unknown_no_replay": true
            },
            "material_combinations": [
              {
                "materials": [
                  "text"
                ],
                "mode": "text_input",
                "required": [
                  "messages"
                ]
              },
              {
                "condition": "Image content is carried by this protocol where the exact selected model supports vision. Protocol admission does not establish image capability for every model.",
                "materials": [
                  "text",
                  "image"
                ],
                "mode": "image_with_text",
                "required": [
                  "messages with actual image content blocks"
                ]
              }
            ],
            "model_capability_scope": {
              "all_models_vision_claim": false,
              "manufacturer_description_preserved": "Retain grounded accepted legacy vision descriptions; a plain text example is not a capability ceiling.",
              "model_vision": "conditional_on_exact_model_capability",
              "transport_materials": [
                "text",
                "image"
              ],
              "video_audio_inferred": false
            },
            "outputs": {
              "all_results": "Säilytä jokainen sisältölohko, työkalukutsun tunniste, mahdollinen palautettu ajatteluallekirjoitus, kaikki SSE-muutokset ja täydelliset käyttötiedot. Ensimmäinen tekstikatkelma ei ole koko tulos.",
              "every_actual_output": true,
              "family": "text",
              "fields": [
                {
                  "name": "choices[]",
                  "type": "object"
                },
                {
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "JSON or SSE"
            },
            "parameters": [
              {
                "conditions": "Käytä täsmälleen tätä Ailoot-reititysvalitsinta.",
                "default_known": false,
                "enum": [
                  "google/gemma-4-31b-it:free"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "conditions": "",
                "default_known": false,
                "enum_known": false,
                "items": {
                  "properties": {
                    "content": {
                      "oneOf": [
                        {
                          "type": "string"
                        },
                        {
                          "items": {
                            "oneOf": [
                              {
                                "properties": {
                                  "text": {
                                    "type": "string"
                                  },
                                  "type": {
                                    "const": "text"
                                  }
                                },
                                "required": [
                                  "type",
                                  "text"
                                ],
                                "type": "object"
                              },
                              {
                                "properties": {
                                  "image_url": {
                                    "properties": {
                                      "detail": {
                                        "type": "string"
                                      },
                                      "url": {
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "url"
                                    ],
                                    "type": "object"
                                  },
                                  "type": {
                                    "const": "image_url"
                                  }
                                },
                                "required": [
                                  "type",
                                  "image_url"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "type": "array"
                        }
                      ]
                    },
                    "role": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "role",
                    "content"
                  ],
                  "type": "object"
                },
                "minItems": 1,
                "name": "messages",
                "required": true,
                "type": "array"
              },
              {
                "conditions": "",
                "default": false,
                "default_known": true,
                "enum_known": false,
                "name": "stream",
                "required": false,
                "type": "boolean"
              }
            ],
            "request_schema": {
              "additionalProperties": true,
              "properties": {
                "messages": {
                  "items": {
                    "properties": {
                      "content": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "items": {
                              "oneOf": [
                                {
                                  "properties": {
                                    "text": {
                                      "type": "string"
                                    },
                                    "type": {
                                      "const": "text"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "text"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "properties": {
                                    "image_url": {
                                      "properties": {
                                        "detail": {
                                          "type": "string"
                                        },
                                        "url": {
                                          "type": "string"
                                        }
                                      },
                                      "required": [
                                        "url"
                                      ],
                                      "type": "object"
                                    },
                                    "type": {
                                      "const": "image_url"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "image_url"
                                  ],
                                  "type": "object"
                                }
                              ]
                            },
                            "type": "array"
                          }
                        ]
                      },
                      "role": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "role",
                      "content"
                    ],
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "google/gemma-4-31b-it:free"
                  ],
                  "type": "string"
                },
                "stream": {
                  "default": false,
                  "type": "boolean"
                }
              },
              "required": [
                "model",
                "messages"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "messages": [
                  {
                    "content": "Explain how a rainbow forms.",
                    "role": "user"
                  }
                ],
                "model": "google/gemma-4-31b-it:free"
              },
              "content_type": "application/json",
              "example_is_offline_content": true
            },
            "usage": {
              "meter": "Use the accepted method price and actual recorded usage; the request reserve is an estimate. A billing unit does not add an input capability.",
              "preserve": "Keep all returned usage, accounting and request identifiers with every actual output.",
              "settlement": "Retain the original operation; reconcile its result and accounting once."
            }
          },
          "input": {
            "conditions": [
              "Käytä täsmälleen tätä Ailoot-reititysvalitsinta.",
              "Tämä protokolla välittää kuvasisältöä, kun juuri valittu malli tukee kuvien tulkintaa. Protokollan hyväksyminen ei osoita kaikkien mallien tukevan kuvia."
            ],
            "content_type": "application/json",
            "material_types": [
              "text",
              "image"
            ],
            "optional": [
              "stream"
            ],
            "required": [
              "model",
              "messages"
            ]
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "create": {
              "http": "POST",
              "path": "/v1/chat/completions"
            },
            "mode": "synchronous_or_streamed",
            "status": [],
            "unknown": "Keep the original X-Client-Request-ID, response and headers. An unknown or result_pending_check outcome does not authorize a second creation.",
            "unknown_no_replay": true
          },
          "method": {
            "http": "POST",
            "path": "/v1/chat/completions"
          },
          "method_aliases": [
            "/chat/completions"
          ],
          "output": {
            "all_results": "Retain every content block, tool-call ID, thinking signature when returned, all SSE deltas and complete usage. A first text fragment is not the whole result.",
            "every_actual_output": true,
            "family": "text",
            "fields": [
              {
                "name": "choices[]",
                "type": "object"
              },
              {
                "name": "usage",
                "type": "object"
              }
            ],
            "format": "JSON or SSE"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "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}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"google/gemma-4-31b-it:free\", \"messages\": [{\"role\": \"user\", \"content\": \"Explain how a rainbow forms.\"}]}')\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/chat/completions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\n# Submit once. Retain the complete result, original identifiers and every response header.\n",
            "label": "curl · create once and retain the complete result",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": 1,
        "flex_multiplier": 1,
        "fmt": "chat",
        "http": "POST",
        "in": 0,
        "input": [
          "text",
          "image"
        ],
        "input_conditions": {
          "image": "Image content is carried by this protocol where the exact selected model supports vision. Protocol admission does not establish image capability for every model."
        },
        "label": "OpenAI Chat",
        "max_out": null,
        "max_reasoning_effort_multiplier": 1,
        "method_aliases": [
          "/chat/completions"
        ],
        "out": 0,
        "output": [
          "text"
        ],
        "path": "/v1/chat/completions",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Standard rate",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Standard rate",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Standard rate",
            "when": "When maximum reasoning effort uses the default adjustment"
          },
          {
            "label": "Explicit cache pricing",
            "value": "Not enabled",
            "when": "When explicit cache is requested"
          },
          {
            "label": "Nollahinnat pelkälle tekstille",
            "value": "Välimuistiin, työkaluihin ja mediaan sovelletaan niiden erikseen lueteltuja hinnoitteluehtoja.",
            "when": "Pelkkää tekstiä sisältävälle syötteelle ja tulosteelle"
          }
        ],
        "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",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "request_model_id": "google/gemma-4-31b-it:free",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [],
        "units": [
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      }
    }
  ],
  "model_id": "google/gemma-4-31b-it:free",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "184237edb6d0f9cdaf25ddf4483a0260421f6fa11f245716cefe954a5fe9b04b",
    "input_html_sha256": "fc6b9c460ffc179b0235047fc5716c9d911663fdd3648eb614fa4e5d799dae6b",
    "private_audit_sha256": "1f2707095ab415827823ea97f2d90895c3165bd11d03d96c5da98edc8dd4ac6e",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/fi/google-gemma-4-31b-it-u003a-free/",
    "description": "Gemma 4 31B IT on Googlen ohjeita seuraamaan hienosäädetty tiheä malli tekstipohjaiseen ja visuaaliseen päättelyyn. Sen 256K konteksti, säädettävä ajattelu, kuvien ymmärtäminen ja natiivit funktiokutsut tukevat koodi-, asiakirja- ja agenttitehtäviä, joiden tuloste on tekstiä.",
    "locale": "fi",
    "md_url": "https://ailoot.ai/models/fi/google-gemma-4-31b-it-u003a-free/index.md",
    "title": "Google: Gemma 4 31B (free) — Ailoot",
    "url": "https://ailoot.ai/models/fi/google-gemma-4-31b-it-u003a-free/"
  },
  "rawModel": {
    "about": "Gemma 4 31B IT on Google DeepMindin avoimen Gemma 4 -perheen ohjeita seuraamaan hienosäädetty tiheä versio. Google painottaa 31B-mallissa laatua ja mukauttamista tehtävään, kun taas erillinen 26B A4B -versio käyttää asiantuntijasekoitusta tehokkaaseen päättelylaskentaan. Tämä kortti koskee nimettyä ohjehienosäädettyä 31B-versiota, ei sen esikoulutettuja painoja tai kvantisoitua johdannaista.\n\nVirallisessa tiheän arkkitehtuurin taulukossa mainitaan 30.7 miljardia parametria, 60 kerrosta, 1,024 tokenin liukuva ikkuna ja 256K tokenin konteksti. Perhe yhdistää paikallisen liukuvan ikkunan attention-mekanismin globaaliin attention-mekanismiin, päättyy globaaliin kerrokseen ja käyttää tässä mallissa erillistä visuaalista enkooderia. Näin muodostuva kokonaisuus on suunniteltu teksti- ja kuvasyötteelle sekä tekstitulosteelle. Nämä ovat mallin arkkitehtuuritietoja; ne eivät määrää sovelluksen vastausaikaa tai tarkoita muiden Gemma 4 -kokojen äänituen sisältymistä tähän malliin.\n\n256K tokenin konteksti soveltuu tehtäviin, joissa laaja tekstiaineisto yhdistyy kuvalliseen näyttöön. Kuvia ja tekstiä voi vuorotella samassa kehotteessa; valmistaja suosittelee sijoittamaan kuvan ennen siihen liittyvää tekstiä parhaan tuloksen saavuttamiseksi. Kuvallisiin tehtäviin kuuluvat kohteiden tunnistus, asiakirjasivujen tulkinta, näyttöjen ja käyttöliittymien ymmärtäminen, kaaviot, monikielinen OCR, käsinkirjoitus ja kuvakohtien osoittaminen. Tuloste on tekstiä: poimittua sisältöä, selitys, koodia tai ehdotus työkalutoiminnoksi.\n\nSäädettävän ajattelun avulla malli voi päätellä ennen vastaamista tai vastata suoraan. Gemma 4 lisää natiivin system-roolin user- ja assistant-roolien rinnalle. Googlen kehoteformaatti ottaa ajattelun käyttöön järjestelmäkehotteen <|think|>-ohjaustokenilla ja erottaa ajattelukanavan lopullisesta vastauksesta; dokumentoitu prosessori osaa käsitellä tätä mallipohjaa. Säilytä monivaiheisen keskustelun historiassa aiemmat lopulliset vastaukset ja jätä aiemmat ajatuskulut pois. Poikkeuksena ovat työkalukutsuja sisältävät vuorot, joissa ne tulee valmistajan mukaan säilyttää.\n\nNatiivi Function Calling tukee työkalujen jäsenneltyä käyttöä, ja Googlen julkaisukuvaus dokumentoi myös rakenteisen JSON-tulostuksen. Määrittele tehtävä, käytettävissä oleva funktio ja odotettu tulos; sovellus suorittaa pyydetyn toiminnon ja palauttaa sen tuloksen seuraavaa vaihetta varten. Kooditehtävässä voi pyytää koodin luomista, täydentämistä tai korjaamista, ja kuvallinen avustaja voi selittää kaavion tai näytön palautetun tekstin avulla. Funktiokutsupyyntö on eri asia kuin yhdistetty toiminto, joka on jo suoritettu.\n\nKuvan vaihtelevaa tarkkuutta ohjataan visuaalisten tokenien budjetilla. Dokumentoidut vaihtoehdot ovat 70, 140, 280, 560 ja 1,120 tokenia. Pienemmät budjetit sopivat luokitteluun ja kuvateksteihin; suuremmat säilyttävät enemmän yksityiskohtia OCR:ää, asiakirjojen jäsentämistä ja pientä tekstiä varten mutta vaativat enemmän laskentaa. Päätä ennen kuvan valmistelua, tarvitsetko yleiskuvan vai täsmälliset kirjaimet. Selkeä rajaus etiketistä voi auttaa poimintatehtävässä enemmän kuin avoin pyyntö tutkia kokonaisen sivun jokainen yksityiskohta.\n\nGoogle suosittelee malliperheen näytteistysasetuksiksi temperature 1.0, top-p 0.95 ja top-k 64. Mallikortti erottaa yli 140 kielellä tehdyn koulutuksen yli 35 kielen valmiista tuesta. Ilmoita vastauskieli ja säilytä verkkotunnukset, kenttien nimet tai kaavat nimenomaisesti tehtävänantoon. 256K on kontekstia koskeva määritys; viitattu mallikortti ei määritä tälle versiolle erillistä yleispätevää tulosteen enimmäispituutta.\n\nAnna asiakirja- ja kooditehtävään kyseisen sivun kuva, kirjallinen vaatimus ja lähdekoodikatkelma: ”Lue merkinnät, selitä, miten tämä näkymä eroaa määrittelystä, ja ehdota annettuun koodiin rajattu korjaus.” Pyydä kaaviota koskevassa vastauksessa erottamaan näkyvät arvot päätellystä kehityssuunnasta. Gemman mallikortti mainitsee rajoitteita, jotka liittyvät monitulkintaiseen kieleen, erittäin monimutkaisiin tehtäviin sekä virheellisiin tai vanhentuneisiin faktaväitteisiin. Liitä siksi mukaan ne luotettavat faktat, joita tuloksessa on käytettävä, äläkä odota koulutustiedon tarjoavan niitä.\n\nValitse Ailootissa tämä täsmällinen mallitunnus /v1/chat/completions-pyynnössä ja anna tehtävä messages-kentässä. Jokaisessa viestissä on role ja content; pidä olennainen ohje ja lähdeaineisto yhdessä. Kerää koko JSON-vastaus tai kaikki SSE-osat, kun stream on käytössä, ja säilytä usage-tiedot kirjallisen tuloksen yhteydessä.",
    "alias_of": null,
    "aliases": [],
    "author": "Google",
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0",
            "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": null,
    "formats": [
      "chat"
    ],
    "id": "google/gemma-4-31b-it:free",
    "input": [
      "text",
      "image"
    ],
    "kind": "text",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "accepted_material_guidance": {
              "content_type": "application/json",
              "example_scope": "The preserved text example is one valid request form, not the full protocol input set.",
              "image_condition": "Image content is carried by this protocol where the exact selected model supports vision. Protocol admission does not establish image capability for every model.",
              "material_types": [
                "text",
                "image"
              ],
              "text_file_material": "Actual UTF-8 text can be inserted in a text content part."
            },
            "all_results": "Retain the complete response and headers, original identifiers, every actual output and all usage/accounting fields. Save each unique owned asset and retain every role pointing to it.",
            "authentication": {
              "header": "Authorization",
              "scheme": "Bearer",
              "value": "$AILOOT_API_KEY"
            },
            "errors": [
              {
                "condition": "Pakollinen kenttä, mallivalitsin, tyyppi tai syötteen esitysmuoto on virheellinen.",
                "http_status": 400,
                "recovery": "Tarkista palautetut validointitiedot ennen erillisen pyynnön valmistelua.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Alkuperäinen pyyntö tai tulos on tuntematon tai vaatii tarkistuksen.",
                "http_status": null,
                "recovery": "Säilytä alkuperäiset tunnisteet ja otsakkeet; lue vain tuettuja tila- tai kirjastotietueita. Älä lähetä luontipyyntöä uudelleen.",
                "type": null
              }
            ],
            "lifecycle": {
              "cancel_endpoint": null,
              "create": {
                "http": "POST",
                "path": "/v1/chat/completions"
              },
              "mode": "synchronous_or_streamed",
              "status": [],
              "unknown": "Säilytä alkuperäinen X-Client-Request-ID, vastaus ja otsakkeet. Tuntematon tulos tai result_pending_check ei oikeuta toiseen luontipyyntöön.",
              "unknown_no_replay": true
            },
            "material_combinations": [
              {
                "materials": [
                  "text"
                ],
                "mode": "text_input",
                "required": [
                  "messages"
                ]
              },
              {
                "condition": "Image content is carried by this protocol where the exact selected model supports vision. Protocol admission does not establish image capability for every model.",
                "materials": [
                  "text",
                  "image"
                ],
                "mode": "image_with_text",
                "required": [
                  "messages with actual image content blocks"
                ]
              }
            ],
            "model_capability_scope": {
              "all_models_vision_claim": false,
              "manufacturer_description_preserved": "Retain grounded accepted legacy vision descriptions; a plain text example is not a capability ceiling.",
              "model_vision": "conditional_on_exact_model_capability",
              "transport_materials": [
                "text",
                "image"
              ],
              "video_audio_inferred": false
            },
            "outputs": {
              "all_results": "Säilytä jokainen sisältölohko, työkalukutsun tunniste, mahdollinen palautettu ajatteluallekirjoitus, kaikki SSE-muutokset ja täydelliset käyttötiedot. Ensimmäinen tekstikatkelma ei ole koko tulos.",
              "every_actual_output": true,
              "family": "text",
              "fields": [
                {
                  "name": "choices[]",
                  "type": "object"
                },
                {
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "JSON or SSE"
            },
            "parameters": [
              {
                "conditions": "Käytä täsmälleen tätä Ailoot-reititysvalitsinta.",
                "default_known": false,
                "enum": [
                  "google/gemma-4-31b-it:free"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "conditions": "",
                "default_known": false,
                "enum_known": false,
                "items": {
                  "properties": {
                    "content": {
                      "oneOf": [
                        {
                          "type": "string"
                        },
                        {
                          "items": {
                            "oneOf": [
                              {
                                "properties": {
                                  "text": {
                                    "type": "string"
                                  },
                                  "type": {
                                    "const": "text"
                                  }
                                },
                                "required": [
                                  "type",
                                  "text"
                                ],
                                "type": "object"
                              },
                              {
                                "properties": {
                                  "image_url": {
                                    "properties": {
                                      "detail": {
                                        "type": "string"
                                      },
                                      "url": {
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "url"
                                    ],
                                    "type": "object"
                                  },
                                  "type": {
                                    "const": "image_url"
                                  }
                                },
                                "required": [
                                  "type",
                                  "image_url"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "type": "array"
                        }
                      ]
                    },
                    "role": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "role",
                    "content"
                  ],
                  "type": "object"
                },
                "minItems": 1,
                "name": "messages",
                "required": true,
                "type": "array"
              },
              {
                "conditions": "",
                "default": false,
                "default_known": true,
                "enum_known": false,
                "name": "stream",
                "required": false,
                "type": "boolean"
              }
            ],
            "request_schema": {
              "additionalProperties": true,
              "properties": {
                "messages": {
                  "items": {
                    "properties": {
                      "content": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "items": {
                              "oneOf": [
                                {
                                  "properties": {
                                    "text": {
                                      "type": "string"
                                    },
                                    "type": {
                                      "const": "text"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "text"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "properties": {
                                    "image_url": {
                                      "properties": {
                                        "detail": {
                                          "type": "string"
                                        },
                                        "url": {
                                          "type": "string"
                                        }
                                      },
                                      "required": [
                                        "url"
                                      ],
                                      "type": "object"
                                    },
                                    "type": {
                                      "const": "image_url"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "image_url"
                                  ],
                                  "type": "object"
                                }
                              ]
                            },
                            "type": "array"
                          }
                        ]
                      },
                      "role": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "role",
                      "content"
                    ],
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "google/gemma-4-31b-it:free"
                  ],
                  "type": "string"
                },
                "stream": {
                  "default": false,
                  "type": "boolean"
                }
              },
              "required": [
                "model",
                "messages"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "messages": [
                  {
                    "content": "Explain how a rainbow forms.",
                    "role": "user"
                  }
                ],
                "model": "google/gemma-4-31b-it:free"
              },
              "content_type": "application/json",
              "example_is_offline_content": true
            },
            "usage": {
              "meter": "Use the accepted method price and actual recorded usage; the request reserve is an estimate. A billing unit does not add an input capability.",
              "preserve": "Keep all returned usage, accounting and request identifiers with every actual output.",
              "settlement": "Retain the original operation; reconcile its result and accounting once."
            }
          },
          "input": {
            "conditions": [
              "Käytä täsmälleen tätä Ailoot-reititysvalitsinta.",
              "Tämä protokolla välittää kuvasisältöä, kun juuri valittu malli tukee kuvien tulkintaa. Protokollan hyväksyminen ei osoita kaikkien mallien tukevan kuvia."
            ],
            "content_type": "application/json",
            "material_types": [
              "text",
              "image"
            ],
            "optional": [
              "stream"
            ],
            "required": [
              "model",
              "messages"
            ]
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "create": {
              "http": "POST",
              "path": "/v1/chat/completions"
            },
            "mode": "synchronous_or_streamed",
            "status": [],
            "unknown": "Keep the original X-Client-Request-ID, response and headers. An unknown or result_pending_check outcome does not authorize a second creation.",
            "unknown_no_replay": true
          },
          "method": {
            "http": "POST",
            "path": "/v1/chat/completions"
          },
          "method_aliases": [
            "/chat/completions"
          ],
          "output": {
            "all_results": "Retain every content block, tool-call ID, thinking signature when returned, all SSE deltas and complete usage. A first text fragment is not the whole result.",
            "every_actual_output": true,
            "family": "text",
            "fields": [
              {
                "name": "choices[]",
                "type": "object"
              },
              {
                "name": "usage",
                "type": "object"
              }
            ],
            "format": "JSON or SSE"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "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}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"google/gemma-4-31b-it:free\", \"messages\": [{\"role\": \"user\", \"content\": \"Explain how a rainbow forms.\"}]}')\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/chat/completions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\n# Submit once. Retain the complete result, original identifiers and every response header.\n",
            "label": "curl · create once and retain the complete result",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": 1,
        "flex_multiplier": 1,
        "fmt": "chat",
        "http": "POST",
        "in": 0,
        "input": [
          "text",
          "image"
        ],
        "input_conditions": {
          "image": "Image content is carried by this protocol where the exact selected model supports vision. Protocol admission does not establish image capability for every model."
        },
        "label": "OpenAI Chat",
        "max_out": null,
        "max_reasoning_effort_multiplier": 1,
        "method_aliases": [
          "/chat/completions"
        ],
        "out": 0,
        "output": [
          "text"
        ],
        "path": "/v1/chat/completions",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Standard rate",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Standard rate",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Standard rate",
            "when": "When maximum reasoning effort uses the default adjustment"
          },
          {
            "label": "Explicit cache pricing",
            "value": "Not enabled",
            "when": "When explicit cache is requested"
          },
          {
            "label": "Nollahinnat pelkälle tekstille",
            "value": "Välimuistiin, työkaluihin ja mediaan sovelletaan niiden erikseen lueteltuja hinnoitteluehtoja.",
            "when": "Pelkkää tekstiä sisältävälle syötteelle ja tulosteelle"
          }
        ],
        "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",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "request_model_id": "google/gemma-4-31b-it:free",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [],
        "units": [
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "google/gemma-4-31b-it:free",
        "request_model_id": "google/gemma-4-31b-it:free",
        "route_label": "Ultra"
      }
    ],
    "name": "Google: Gemma 4 31B (free)",
    "price": {
      "in": 0,
      "in_label": null,
      "out": 0,
      "out_label": null,
      "scope_label": "Token rates",
      "sort_in": 0,
      "sort_out": 0,
      "varies": false
    },
    "short": "Gemma 4 31B IT on Googlen ohjeita seuraamaan hienosäädetty tiheä malli tekstipohjaiseen ja visuaaliseen päättelyyn. Sen 256K konteksti, säädettävä ajattelu, kuvien ymmärtäminen ja natiivit funktiokutsut tukevat koodi-, asiakirja- ja agenttitehtäviä, joiden tuloste on tekstiä.",
    "title": "Google: Gemma 4 31B (free)"
  },
  "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": "Gemma 4 31B IT on Googlen ohjeita seuraamaan hienosäädetty tiheä malli tekstipohjaiseen ja visuaaliseen päättelyyn. Sen 256K konteksti, säädettävä ajattelu, kuvien ymmärtäminen ja natiivit funktiokutsut tukevat koodi-, asiakirja- ja agenttitehtäviä, joiden tuloste on tekstiä.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "dd082583b3fcb642068773e941842c1449ab56830286b97d22b7551b4733576c",
    "renderer_sha256": "303a59603e2bc29ba8fda690e95fd32cec68de223d92e26054a88babff801dd7"
  },
  "sourceRevision": "6dfe365a85188f3a01804366b05170dce01491763bce3233a9ae6dc1c2087b76"
}
