{
  "aboutHtml": "<p>Gemma 4 31B IT er Google DeepMinds instruktionstilpassede, tætte udgave af den åbne Gemma 4-familie. Google fremhæver modelkvalitet og opgavetilpasning for 31B-modellen, mens den særskilte 26B A4B-udgave bruger en blanding af eksperter til effektiv inferens. Dette kort omhandler den navngivne, instruktionstilpassede 31B-udgave frem for dens fortrænede vægte eller en kvantiseret afledning.</p><p>Den officielle arkitekturtabel for den tætte model angiver 30.7 milliarder parametre, 60 lag, et glidende vindue på 1,024 tokens og en kontekst på 256K tokens. Familien kombinerer lokal attention med glidende vindue og global attention, slutter med et globalt lag og bruger en dedikeret visuel encoder til denne model. Den resulterende profil er beregnet til tekst- og billedinput med tekstoutput. Dette er fakta om modelarkitekturen; de fastlægger ikke en applikations svartid og indebærer ikke lydunderstøttelsen fra andre Gemma 4-størrelser.</p><p>Dens kontekst på 256K tokens understøtter opgaver, der kombinerer omfattende tekst med visuelt belæg. Billeder og tekst kan flettes ind i samme prompt; producenten anbefaler at placere billedindhold før den tilhørende tekst for at få de bedste resultater. Visuelle opgaver omfatter objektdetektion, fortolkning af dokumentsider, forståelse af skærme og brugergrænseflader, diagrammer, flersproget OCR, håndskrift og udpegning. Resultatet er tekst: udtrukket indhold, en forklaring, kode eller en foreslået værktøjshandling.</p><p>Konfigurerbar tænkning lader modellen ræsonnere før svaret eller svare direkte. Gemma 4 tilføjer en indbygget system-rolle ved siden af user- og assistant-rollerne. Googles promptformat aktiverer tænkning med kontroltokenet &lt;|think|&gt; i systemprompten og adskiller tankekanalen fra det endelige svar; den dokumenterede processor kan håndtere denne skabelon. I en samtale med flere ture gemmer du tidligere endelige svar i historikken og udelader tidligere tanker, undtagen i ture med værktøjskald, hvor producenten siger, at de skal bevares.</p><p>Native Function Calling understøtter struktureret brug af værktøjer, og Googles lanceringsbeskrivelse dokumenterer også struktureret JSON-output. Definer opgaven, den tilgængelige funktion og det forventede resultat; applikationen udfører den ønskede operation og returnerer dens resultat til næste trin. En kodeopgave kan bede om generering, færdiggørelse eller rettelse, mens en visuel assistent kan bruge den returnerede tekst til at forklare et diagram eller en skærm. En instruktion om et funktionskald er forskellig fra en tilkoblet handling, der faktisk er udført.</p><p>Variabel billedopløsning styres af budgettet for visuelle tokens. De dokumenterede muligheder er 70, 140, 280, 560 og 1,120 tokens. Lavere budgetter passer til klassifikation eller billedtekster; højere budgetter bevarer flere detaljer til OCR, dokumentanalyse og lille tekst, men kræver mere beregning. Afgør, om du har brug for hele scenen eller præcis bogstavgenkendelse, før du forbereder billedet. Et tydeligt udsnit af en etiket kan være mere nyttigt til udtræk end en uspecificeret anmodning om at undersøge alle detaljer på en hel side.</p><p>Google anbefaler temperature 1.0, top-p 0.95 og top-k 64 som familiens samplingskonfiguration. Modelkortet skelner mellem træning på mere end 140 sprog og umiddelbar understøttelse af mere end 35 sprog. Angiv svarsprog, og bed udtrykkeligt om at bevare domænenavne, feltnavne eller formler i opgavebeskrivelsen. Tallet 256K er en kontekstspecifikation; det citerede modelkort fastlægger ikke en særskilt universel maksimal outputstørrelse for denne udgave.</p><p>Til en opgave med dokumenter og kode angiver du det relevante sidebillede, det skriftlige krav og kodeudsnittet: “Læs etiketterne, forklar, hvordan denne skærm afviger fra specifikationen, og foreslå en afgrænset rettelse af den medfølgende kode.” Til et diagram beder du svaret skelne mellem synlige værdier og en udledt tendens. Gemmas modelkort nævner begrænsninger ved tvetydigt sprog, meget komplekse opgaver og forkerte eller forældede faktuelle udsagn. Vedlæg derfor de autoritative fakta, resultatet skal bygge på, frem for at forvente, at træningsviden leverer dem.</p><p>Via Ailoot vælger du dette nøjagtige model-ID i /v1/chat/completions og angiver opgaven i messages. Hver besked indeholder en role og sit content; hold den relevante instruktion og kildematerialet samlet. Hent hele JSON-svaret eller alle SSE-segmenter, når stream er aktiveret, og gem usage sammen med det skriftlige resultat.</p>",
  "aboutText": "Gemma 4 31B IT er Google DeepMinds instruktionstilpassede, tætte udgave af den åbne Gemma 4-familie. Google fremhæver modelkvalitet og opgavetilpasning for 31B-modellen, mens den særskilte 26B A4B-udgave bruger en blanding af eksperter til effektiv inferens. Dette kort omhandler den navngivne, instruktionstilpassede 31B-udgave frem for dens fortrænede vægte eller en kvantiseret afledning.\n\nDen officielle arkitekturtabel for den tætte model angiver 30.7 milliarder parametre, 60 lag, et glidende vindue på 1,024 tokens og en kontekst på 256K tokens. Familien kombinerer lokal attention med glidende vindue og global attention, slutter med et globalt lag og bruger en dedikeret visuel encoder til denne model. Den resulterende profil er beregnet til tekst- og billedinput med tekstoutput. Dette er fakta om modelarkitekturen; de fastlægger ikke en applikations svartid og indebærer ikke lydunderstøttelsen fra andre Gemma 4-størrelser.\n\nDens kontekst på 256K tokens understøtter opgaver, der kombinerer omfattende tekst med visuelt belæg. Billeder og tekst kan flettes ind i samme prompt; producenten anbefaler at placere billedindhold før den tilhørende tekst for at få de bedste resultater. Visuelle opgaver omfatter objektdetektion, fortolkning af dokumentsider, forståelse af skærme og brugergrænseflader, diagrammer, flersproget OCR, håndskrift og udpegning. Resultatet er tekst: udtrukket indhold, en forklaring, kode eller en foreslået værktøjshandling.\n\nKonfigurerbar tænkning lader modellen ræsonnere før svaret eller svare direkte. Gemma 4 tilføjer en indbygget system-rolle ved siden af user- og assistant-rollerne. Googles promptformat aktiverer tænkning med kontroltokenet <|think|> i systemprompten og adskiller tankekanalen fra det endelige svar; den dokumenterede processor kan håndtere denne skabelon. I en samtale med flere ture gemmer du tidligere endelige svar i historikken og udelader tidligere tanker, undtagen i ture med værktøjskald, hvor producenten siger, at de skal bevares.\n\nNative Function Calling understøtter struktureret brug af værktøjer, og Googles lanceringsbeskrivelse dokumenterer også struktureret JSON-output. Definer opgaven, den tilgængelige funktion og det forventede resultat; applikationen udfører den ønskede operation og returnerer dens resultat til næste trin. En kodeopgave kan bede om generering, færdiggørelse eller rettelse, mens en visuel assistent kan bruge den returnerede tekst til at forklare et diagram eller en skærm. En instruktion om et funktionskald er forskellig fra en tilkoblet handling, der faktisk er udført.\n\nVariabel billedopløsning styres af budgettet for visuelle tokens. De dokumenterede muligheder er 70, 140, 280, 560 og 1,120 tokens. Lavere budgetter passer til klassifikation eller billedtekster; højere budgetter bevarer flere detaljer til OCR, dokumentanalyse og lille tekst, men kræver mere beregning. Afgør, om du har brug for hele scenen eller præcis bogstavgenkendelse, før du forbereder billedet. Et tydeligt udsnit af en etiket kan være mere nyttigt til udtræk end en uspecificeret anmodning om at undersøge alle detaljer på en hel side.\n\nGoogle anbefaler temperature 1.0, top-p 0.95 og top-k 64 som familiens samplingskonfiguration. Modelkortet skelner mellem træning på mere end 140 sprog og umiddelbar understøttelse af mere end 35 sprog. Angiv svarsprog, og bed udtrykkeligt om at bevare domænenavne, feltnavne eller formler i opgavebeskrivelsen. Tallet 256K er en kontekstspecifikation; det citerede modelkort fastlægger ikke en særskilt universel maksimal outputstørrelse for denne udgave.\n\nTil en opgave med dokumenter og kode angiver du det relevante sidebillede, det skriftlige krav og kodeudsnittet: “Læs etiketterne, forklar, hvordan denne skærm afviger fra specifikationen, og foreslå en afgrænset rettelse af den medfølgende kode.” Til et diagram beder du svaret skelne mellem synlige værdier og en udledt tendens. Gemmas modelkort nævner begrænsninger ved tvetydigt sprog, meget komplekse opgaver og forkerte eller forældede faktuelle udsagn. Vedlæg derfor de autoritative fakta, resultatet skal bygge på, frem for at forvente, at træningsviden leverer dem.\n\nVia Ailoot vælger du dette nøjagtige model-ID i /v1/chat/completions og angiver opgaven i messages. Hver besked indeholder en role og sit content; hold den relevante instruktion og kildematerialet samlet. Hent hele JSON-svaret eller alle SSE-segmenter, når stream er aktiveret, og gem usage sammen med det skriftlige resultat.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "bab2d47d13f69fe409fa5ce2ddd89c5222903fcacab872129983794d36efdb6f",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "da",
  "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=\"Luk\">×</button></div><div class=\"idline\"><span>Google /</span><code>google/gemma-4-31b-it:free</code><button type=\"button\" id=\"copy-id\">Kopiér ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Modelkortets afsnit\"><button type=\"button\" data-card-jump=\"overview\">Start</button><button type=\"button\" data-card-jump=\"methods\">Input og metoder</button><button type=\"button\" data-card-jump=\"pricing\">Priser</button><button type=\"button\" data-card-jump=\"examples\">Eksempler</button><button type=\"button\" data-card-jump=\"results\">Resultater</button><button type=\"button\" data-card-jump=\"aliases\">Aliaser</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API-metoder\"><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\">Start</h3><p class=\"mdesc-full\">Gemma 4 31B IT er Googles instruktionstilpassede, tætte model til tekstbaseret og visuelt ræsonnement. Dens kontekst på 256K, konfigurerbare tænkning, billedforståelse og indbyggede funktionskald understøtter kode-, dokument- og agentopgaver med tekst som resultat.</p><dl class=\"card-io\" data-card-io><div><dt>Accepterede input</dt><dd>Tekst · Billeder</dd></div><div><dt>Resultater</dt><dd>Tekst</dd></div></dl><details class=\"card-about\"><summary>Om modellen</summary><p class=\"note-s\" data-model-method-boundary>Denne beskrivelse dækker modellens funktioner. Tilgængelige input, output og indstillinger i Ailoot står nedenfor for den valgte metode.</p><div class=\"mabout\" id=\"m-about\"><p>Gemma 4 31B IT er Google DeepMinds instruktionstilpassede, tætte udgave af den åbne Gemma 4-familie. Google fremhæver modelkvalitet og opgavetilpasning for 31B-modellen, mens den særskilte 26B A4B-udgave bruger en blanding af eksperter til effektiv inferens. Dette kort omhandler den navngivne, instruktionstilpassede 31B-udgave frem for dens fortrænede vægte eller en kvantiseret afledning.</p><p>Den officielle arkitekturtabel for den tætte model angiver 30.7 milliarder parametre, 60 lag, et glidende vindue på 1,024 tokens og en kontekst på 256K tokens. Familien kombinerer lokal attention med glidende vindue og global attention, slutter med et globalt lag og bruger en dedikeret visuel encoder til denne model. Den resulterende profil er beregnet til tekst- og billedinput med tekstoutput. Dette er fakta om modelarkitekturen; de fastlægger ikke en applikations svartid og indebærer ikke lydunderstøttelsen fra andre Gemma 4-størrelser.</p><p>Dens kontekst på 256K tokens understøtter opgaver, der kombinerer omfattende tekst med visuelt belæg. Billeder og tekst kan flettes ind i samme prompt; producenten anbefaler at placere billedindhold før den tilhørende tekst for at få de bedste resultater. Visuelle opgaver omfatter objektdetektion, fortolkning af dokumentsider, forståelse af skærme og brugergrænseflader, diagrammer, flersproget OCR, håndskrift og udpegning. Resultatet er tekst: udtrukket indhold, en forklaring, kode eller en foreslået værktøjshandling.</p><p>Konfigurerbar tænkning lader modellen ræsonnere før svaret eller svare direkte. Gemma 4 tilføjer en indbygget system-rolle ved siden af user- og assistant-rollerne. Googles promptformat aktiverer tænkning med kontroltokenet &lt;|think|&gt; i systemprompten og adskiller tankekanalen fra det endelige svar; den dokumenterede processor kan håndtere denne skabelon. I en samtale med flere ture gemmer du tidligere endelige svar i historikken og udelader tidligere tanker, undtagen i ture med værktøjskald, hvor producenten siger, at de skal bevares.</p><p>Native Function Calling understøtter struktureret brug af værktøjer, og Googles lanceringsbeskrivelse dokumenterer også struktureret JSON-output. Definer opgaven, den tilgængelige funktion og det forventede resultat; applikationen udfører den ønskede operation og returnerer dens resultat til næste trin. En kodeopgave kan bede om generering, færdiggørelse eller rettelse, mens en visuel assistent kan bruge den returnerede tekst til at forklare et diagram eller en skærm. En instruktion om et funktionskald er forskellig fra en tilkoblet handling, der faktisk er udført.</p><p>Variabel billedopløsning styres af budgettet for visuelle tokens. De dokumenterede muligheder er 70, 140, 280, 560 og 1,120 tokens. Lavere budgetter passer til klassifikation eller billedtekster; højere budgetter bevarer flere detaljer til OCR, dokumentanalyse og lille tekst, men kræver mere beregning. Afgør, om du har brug for hele scenen eller præcis bogstavgenkendelse, før du forbereder billedet. Et tydeligt udsnit af en etiket kan være mere nyttigt til udtræk end en uspecificeret anmodning om at undersøge alle detaljer på en hel side.</p><p>Google anbefaler temperature 1.0, top-p 0.95 og top-k 64 som familiens samplingskonfiguration. Modelkortet skelner mellem træning på mere end 140 sprog og umiddelbar understøttelse af mere end 35 sprog. Angiv svarsprog, og bed udtrykkeligt om at bevare domænenavne, feltnavne eller formler i opgavebeskrivelsen. Tallet 256K er en kontekstspecifikation; det citerede modelkort fastlægger ikke en særskilt universel maksimal outputstørrelse for denne udgave.</p><p>Til en opgave med dokumenter og kode angiver du det relevante sidebillede, det skriftlige krav og kodeudsnittet: “Læs etiketterne, forklar, hvordan denne skærm afviger fra specifikationen, og foreslå en afgrænset rettelse af den medfølgende kode.” Til et diagram beder du svaret skelne mellem synlige værdier og en udledt tendens. Gemmas modelkort nævner begrænsninger ved tvetydigt sprog, meget komplekse opgaver og forkerte eller forældede faktuelle udsagn. Vedlæg derfor de autoritative fakta, resultatet skal bygge på, frem for at forvente, at træningsviden leverer dem.</p><p>Via Ailoot vælger du dette nøjagtige model-ID i /v1/chat/completions og angiver opgaven i messages. Hver besked indeholder en role og sit content; hold den relevante instruktion og kildematerialet samlet. Hent hele JSON-svaret eller alle SSE-segmenter, når stream er aktiveret, og gem usage sammen med det skriftlige resultat.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Tilgængelig i Ailoot · input og metoder</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>Inputtyper</dt><dd><code>text</code>, <code>image</code></dd></div><div><dt>Outputtyper</dt><dd><code>text</code></dd></div><div><dt>Outputformat</dt><dd>JSON or SSE</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Felt</th><th>Type</th><th>Krav</th><th>Værdier og grænser</th><th>Standard</th></tr></thead><tbody><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrævet</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>google/gemma-4-31b-it:free</div><div>Betingelser: Brug præcis denne routingvælger for Ailoot.</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">messages</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>array</code></td><td data-cell-label=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrævet</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>Betingelser: </div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">stream</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>boolean</code></td><td data-cell-label=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valgfrit</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>Betingelser: </div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>false</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Kombinationer af inputmaterialer</summary><p class=\"note-s\"><b>text_input</b> · Påkrævet: messages</p><p class=\"note-s\"><b>image_with_text</b> · Påkrævet: messages with actual image content blocks</p></details><details class=\"note-s\" data-method-contract><summary>Metodeparametre og livscyklus</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Kontrakt</th></tr></thead><tbody><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>content_type</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>application/json</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>required</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>model, messages</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>optional</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>stream</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_types</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>text, image</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>conditions</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>Brug præcis denne routingvælger for Ailoot., Denne protokol overfører billedindhold, når netop den valgte model understøtter billedforståelse. Adgang via protokollen dokumenterer ikke, at alle modeller understøtter billeder.</td></tr></tbody></table></div><p>Metodealiaser: <code>/chat/completions</code></p><p>Livscyklus: <code>synchronous_or_streamed</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Priser</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Tarifoplysninger tilføjer ikke anmodningsmuligheder. Understøttede parametre står ved den valgte metode.</p><dl data-price-conditions><dt>Hurtig tilstand</dt><dd>Standardpris <span class=\"note-s\">Når hurtig tilstand er valgt</span></dd><dt>flex-tilstand</dt><dd>Standardpris <span class=\"note-s\">Når flex-tilstanden er valgt</span></dd><dt>Maksimal ræsonneringsindsats</dt><dd>Standardpris <span class=\"note-s\">Når default-justeringen anvendes ved maksimal ræsonneringsindsats</span></dd><dt>Priser for eksplicit caching</dt><dd>Ikke aktiveret <span class=\"note-s\">Når der anmodes om eksplicit caching</span></dd><dt>Nulsatser for ren tekstbehandling</dt><dd>Cache, værktøjer og medier følger de særskilt angivne prisbetingelser. <span class=\"note-s\">Til input og output udelukkende som tekst</span></dd></dl></div><div data-declared-tariff-pricing><h4>Ailoot-takster</h4><h4>Priser efter konfiguration</h4><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Konfiguration</th><th>Takstplan</th><th>Beløb</th></tr></thead><tbody><tr><th data-cell-label=\"Konfiguration\" scope=\"row\"><span class=\"card-cell-label\">Konfiguration</span>Grundpriser for tokens</th><td data-cell-label=\"Takstplan\"><span class=\"card-cell-label\">Takstplan</span>Grundtakst</td><td data-cell-label=\"Beløb\"><span class=\"card-cell-label\">Beløb</span><div><span>Input · Inputtokens</span> <b>$0</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Output · Outputtokens</span> <b>$0</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Input · Cachelæsning</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Input · Cacheskrivning</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Input · Cacheskrivning, 1 time</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot reserverer et estimeret beløb før en anmodning. Efter resultatet afregnes det endelige beløb ud fra det målte forbrug. Ved streaming bruges den endelige forbrugsregistrering til afregningen. <a href=\"/docs/da/billing/reserve/\">Sådan fungerer reservation og afregning →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Eksempelanmodninger</h3><h4>Ailoot Ultra · OpenAI Chat</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Kodevarianter\"><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 · opret én gang, og bevar hele resultatet</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopiér kode\"><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\">Hent og gem resultater</h3><h4>Ailoot Ultra · OpenAI Chat</h4><p class=\"note-s\">JSON or SSE</p><div class=\"card-result-process\" data-all-results><h5>Behold alle færdige resultater</h5><p class=\"note-s\">Gem hvert fuldstændigt returneret svar, hver fil og hver indholdsdel.</p><p class=\"note-s\">Bevar hver indholdsblok, hvert ID for et værktøjskald, en eventuel returneret signatur for tankeprocessen, alle SSE-deltaer og de fuldstændige forbrugsdata. Det første tekstfragment er ikke hele resultatet.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Hvis det oprindelige svar skal kontrolleres</h5><p class=\"note-s\">Bevar det oprindelige X-Client-Request-ID samt svaret og headerne. Et ukendt resultat eller et resultat med status result_pending_check giver ikke tilladelse til endnu en oprettelse.</p></div><details class=\"card-about\" data-output-fields><summary>Svarfelter</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Felt</th><th>Type</th></tr></thead><tbody><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">choices[]</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>object</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>object</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Fejl og næste trin</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Svar</th><th>Betingelse</th><th>Næste trin</th></tr></thead><tbody><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Betingelse\"><span class=\"card-cell-label\">Betingelse</span>Et påkrævet felt, en modelvælger, en type eller en inputrepræsentation er ugyldig.</td><td data-cell-label=\"Næste trin\"><span class=\"card-cell-label\">Næste trin</span>Undersøg de returnerede valideringsoplysninger, før du forbereder en separat anmodning.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span><code></code></th><td data-cell-label=\"Betingelse\"><span class=\"card-cell-label\">Betingelse</span>Den oprindelige anmodning eller resultatet er ukendt eller skal kontrolleres.</td><td data-cell-label=\"Næste trin\"><span class=\"card-cell-label\">Næste trin</span>Bevar de oprindelige identifikatorer og headere; læs kun understøttede status- eller biblioteksposter. Indsend ikke oprettelsesanmodningen igen.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliaser</h3><h4>Modelaliaser</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>Aliaser for metodestier</h4><p class=\"note-s\"><code>/chat/completions</code></p><h4>Relaterede kalder-ID’er</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": "Et påkrævet felt, en modelvælger, en type eller en inputrepræsentation er ugyldig.",
                "http_status": 400,
                "recovery": "Undersøg de returnerede valideringsoplysninger, før du forbereder en separat anmodning.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Den oprindelige anmodning eller resultatet er ukendt eller skal kontrolleres.",
                "http_status": null,
                "recovery": "Bevar de oprindelige identifikatorer og headere; læs kun understøttede status- eller biblioteksposter. Indsend ikke oprettelsesanmodningen igen.",
                "type": null
              }
            ],
            "lifecycle": {
              "cancel_endpoint": null,
              "create": {
                "http": "POST",
                "path": "/v1/chat/completions"
              },
              "mode": "synchronous_or_streamed",
              "status": [],
              "unknown": "Bevar det oprindelige X-Client-Request-ID samt svaret og headerne. Et ukendt resultat eller et resultat med status result_pending_check giver ikke tilladelse til endnu en oprettelse.",
              "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": "Bevar hver indholdsblok, hvert ID for et værktøjskald, en eventuel returneret signatur for tankeprocessen, alle SSE-deltaer og de fuldstændige forbrugsdata. Det første tekstfragment er ikke hele resultatet.",
              "every_actual_output": true,
              "family": "text",
              "fields": [
                {
                  "name": "choices[]",
                  "type": "object"
                },
                {
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "JSON or SSE"
            },
            "parameters": [
              {
                "conditions": "Brug præcis denne routingvælger for Ailoot.",
                "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": [
              "Brug præcis denne routingvælger for Ailoot.",
              "Denne protokol overfører billedindhold, når netop den valgte model understøtter billedforståelse. Adgang via protokollen dokumenterer ikke, at alle modeller understøtter billeder."
            ],
            "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": "Nulsatser for ren tekstbehandling",
            "value": "Cache, værktøjer og medier følger de særskilt angivne prisbetingelser.",
            "when": "Til input og output udelukkende som tekst"
          }
        ],
        "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": "4f5188d1cadd57a4eac019701bc4f6b18b03c4f785287ce4b30546fe8d0f884f",
    "input_html_sha256": "dc79d323a8da796fcf5232eb29840964dfb598527b703442705f710f3b51c4a8",
    "private_audit_sha256": "f5132f78c691921972167e574d22a14d452c3d9132ac796c73e5cb5728b462f1",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/da/google-gemma-4-31b-it-u003a-free/",
    "description": "Gemma 4 31B IT er Googles instruktionstilpassede, tætte model til tekstbaseret og visuelt ræsonnement. Dens kontekst på 256K, konfigurerbare tænkning, billedforståelse og indbyggede funktionskald understøtter kode-, dokument- og agentopgaver med tekst som resultat.",
    "locale": "da",
    "md_url": "https://ailoot.ai/models/da/google-gemma-4-31b-it-u003a-free/index.md",
    "title": "Google: Gemma 4 31B (free) — Ailoot",
    "url": "https://ailoot.ai/models/da/google-gemma-4-31b-it-u003a-free/"
  },
  "rawModel": {
    "about": "Gemma 4 31B IT er Google DeepMinds instruktionstilpassede, tætte udgave af den åbne Gemma 4-familie. Google fremhæver modelkvalitet og opgavetilpasning for 31B-modellen, mens den særskilte 26B A4B-udgave bruger en blanding af eksperter til effektiv inferens. Dette kort omhandler den navngivne, instruktionstilpassede 31B-udgave frem for dens fortrænede vægte eller en kvantiseret afledning.\n\nDen officielle arkitekturtabel for den tætte model angiver 30.7 milliarder parametre, 60 lag, et glidende vindue på 1,024 tokens og en kontekst på 256K tokens. Familien kombinerer lokal attention med glidende vindue og global attention, slutter med et globalt lag og bruger en dedikeret visuel encoder til denne model. Den resulterende profil er beregnet til tekst- og billedinput med tekstoutput. Dette er fakta om modelarkitekturen; de fastlægger ikke en applikations svartid og indebærer ikke lydunderstøttelsen fra andre Gemma 4-størrelser.\n\nDens kontekst på 256K tokens understøtter opgaver, der kombinerer omfattende tekst med visuelt belæg. Billeder og tekst kan flettes ind i samme prompt; producenten anbefaler at placere billedindhold før den tilhørende tekst for at få de bedste resultater. Visuelle opgaver omfatter objektdetektion, fortolkning af dokumentsider, forståelse af skærme og brugergrænseflader, diagrammer, flersproget OCR, håndskrift og udpegning. Resultatet er tekst: udtrukket indhold, en forklaring, kode eller en foreslået værktøjshandling.\n\nKonfigurerbar tænkning lader modellen ræsonnere før svaret eller svare direkte. Gemma 4 tilføjer en indbygget system-rolle ved siden af user- og assistant-rollerne. Googles promptformat aktiverer tænkning med kontroltokenet <|think|> i systemprompten og adskiller tankekanalen fra det endelige svar; den dokumenterede processor kan håndtere denne skabelon. I en samtale med flere ture gemmer du tidligere endelige svar i historikken og udelader tidligere tanker, undtagen i ture med værktøjskald, hvor producenten siger, at de skal bevares.\n\nNative Function Calling understøtter struktureret brug af værktøjer, og Googles lanceringsbeskrivelse dokumenterer også struktureret JSON-output. Definer opgaven, den tilgængelige funktion og det forventede resultat; applikationen udfører den ønskede operation og returnerer dens resultat til næste trin. En kodeopgave kan bede om generering, færdiggørelse eller rettelse, mens en visuel assistent kan bruge den returnerede tekst til at forklare et diagram eller en skærm. En instruktion om et funktionskald er forskellig fra en tilkoblet handling, der faktisk er udført.\n\nVariabel billedopløsning styres af budgettet for visuelle tokens. De dokumenterede muligheder er 70, 140, 280, 560 og 1,120 tokens. Lavere budgetter passer til klassifikation eller billedtekster; højere budgetter bevarer flere detaljer til OCR, dokumentanalyse og lille tekst, men kræver mere beregning. Afgør, om du har brug for hele scenen eller præcis bogstavgenkendelse, før du forbereder billedet. Et tydeligt udsnit af en etiket kan være mere nyttigt til udtræk end en uspecificeret anmodning om at undersøge alle detaljer på en hel side.\n\nGoogle anbefaler temperature 1.0, top-p 0.95 og top-k 64 som familiens samplingskonfiguration. Modelkortet skelner mellem træning på mere end 140 sprog og umiddelbar understøttelse af mere end 35 sprog. Angiv svarsprog, og bed udtrykkeligt om at bevare domænenavne, feltnavne eller formler i opgavebeskrivelsen. Tallet 256K er en kontekstspecifikation; det citerede modelkort fastlægger ikke en særskilt universel maksimal outputstørrelse for denne udgave.\n\nTil en opgave med dokumenter og kode angiver du det relevante sidebillede, det skriftlige krav og kodeudsnittet: “Læs etiketterne, forklar, hvordan denne skærm afviger fra specifikationen, og foreslå en afgrænset rettelse af den medfølgende kode.” Til et diagram beder du svaret skelne mellem synlige værdier og en udledt tendens. Gemmas modelkort nævner begrænsninger ved tvetydigt sprog, meget komplekse opgaver og forkerte eller forældede faktuelle udsagn. Vedlæg derfor de autoritative fakta, resultatet skal bygge på, frem for at forvente, at træningsviden leverer dem.\n\nVia Ailoot vælger du dette nøjagtige model-ID i /v1/chat/completions og angiver opgaven i messages. Hver besked indeholder en role og sit content; hold den relevante instruktion og kildematerialet samlet. Hent hele JSON-svaret eller alle SSE-segmenter, når stream er aktiveret, og gem usage sammen med det skriftlige resultat.",
    "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": "De fulde prisoplysninger for konfigurationen findes under detaljer."
      }
    ],
    "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": "Et påkrævet felt, en modelvælger, en type eller en inputrepræsentation er ugyldig.",
                "http_status": 400,
                "recovery": "Undersøg de returnerede valideringsoplysninger, før du forbereder en separat anmodning.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Den oprindelige anmodning eller resultatet er ukendt eller skal kontrolleres.",
                "http_status": null,
                "recovery": "Bevar de oprindelige identifikatorer og headere; læs kun understøttede status- eller biblioteksposter. Indsend ikke oprettelsesanmodningen igen.",
                "type": null
              }
            ],
            "lifecycle": {
              "cancel_endpoint": null,
              "create": {
                "http": "POST",
                "path": "/v1/chat/completions"
              },
              "mode": "synchronous_or_streamed",
              "status": [],
              "unknown": "Bevar det oprindelige X-Client-Request-ID samt svaret og headerne. Et ukendt resultat eller et resultat med status result_pending_check giver ikke tilladelse til endnu en oprettelse.",
              "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": "Bevar hver indholdsblok, hvert ID for et værktøjskald, en eventuel returneret signatur for tankeprocessen, alle SSE-deltaer og de fuldstændige forbrugsdata. Det første tekstfragment er ikke hele resultatet.",
              "every_actual_output": true,
              "family": "text",
              "fields": [
                {
                  "name": "choices[]",
                  "type": "object"
                },
                {
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "JSON or SSE"
            },
            "parameters": [
              {
                "conditions": "Brug præcis denne routingvælger for Ailoot.",
                "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": [
              "Brug præcis denne routingvælger for Ailoot.",
              "Denne protokol overfører billedindhold, når netop den valgte model understøtter billedforståelse. Adgang via protokollen dokumenterer ikke, at alle modeller understøtter billeder."
            ],
            "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": "Nulsatser for ren tekstbehandling",
            "value": "Cache, værktøjer og medier følger de særskilt angivne prisbetingelser.",
            "when": "Til input og output udelukkende som tekst"
          }
        ],
        "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 er Googles instruktionstilpassede, tætte model til tekstbaseret og visuelt ræsonnement. Dens kontekst på 256K, konfigurerbare tænkning, billedforståelse og indbyggede funktionskald understøtter kode-, dokument- og agentopgaver med tekst som resultat.",
    "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 er Googles instruktionstilpassede, tætte model til tekstbaseret og visuelt ræsonnement. Dens kontekst på 256K, konfigurerbare tænkning, billedforståelse og indbyggede funktionskald understøtter kode-, dokument- og agentopgaver med tekst som resultat.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "556db2031624cfb54b6378bdca998c3a8b771abd1a21b297869c0ec1d910d31f",
    "renderer_sha256": "2bf9f26ea9bfd57ed53d867671d8f05b41a6ea85089f48039e3365dc2b92ec2c"
  },
  "sourceRevision": "2f76eb89ec61b9bbd9536e21e7b55ee04a1f2dadcbddeb32c092d5ca1d93723d"
}
