Google: Gemini 3.1 Pro Preview
Gemini 3.1 Pro Preview è il modello di ragionamento multimodale di Google per compiti complessi di software, algoritmi e conoscenza. Accetta testo, immagini, audio, video e PDF e restituisce testo o codice, con strumenti e uscite strutturate. I livelli di ragionamento low, medium e high orientano l’impegno; high è il valore predefinito documentato.
- Ailoot · Anthropic Messages
POST /v1/messagesgemini-3.1-pro-preview - Ailoot · Gemini generateContent
POST /v1beta/models/{model}:generateContentgemini-3.1-pro-preview - Ailoot Ultra · OpenAI Chat
POST /v1/chat/completionsgemini-3.1-pro-preview - Ailoot Ultra · Anthropic Messages
POST /v1/messagesgemini-3.1-pro-preview - Ailoot Ultra · OpenAI Chat
POST /v1/chat/completionsgoogle/gemini-3.1-pro-preview - Ailoot Ultra · Anthropic Messages
POST /v1/messagesgoogle/gemini-3.1-pro-preview
Informazioni sul modello
Questa descrizione illustra le funzionalità del modello. Gli input, gli output e le opzioni disponibili in Ailoot per il metodo selezionato sono elencati di seguito.
Gemini 3.1 Pro Preview è il modello testuale di Google orientato al ragionamento per compiti complessi che richiedono ingegneria del software, sviluppo algoritmico o sintesi di prove multimodali. Si basa su Gemini 3 Pro, enfatizzando uso preciso degli strumenti, ragionamento più efficiente ed esecuzione affidabile in più passaggi. Testo, immagini, audio, video e PDF possono contribuire a una risposta scritta, un artefatto di codice o un risultato strutturato.
Per un incarico di programmazione impegnativo, fornisci l'obiettivo, il materiale pertinente del repository, il comportamento osservato e i vincoli da conservare. Interi repository di codice possono fornire contesto per l'incarico. Per una revisione del contratto del codice, chiedi al modello di confrontare come due moduli gestiscono un contratto dati condiviso, individuare la discrepanza e proporre una correzione mirata con riferimenti al codice a supporto. L'output utile distingue l'analisi, la revisione proposta e le prove da qualsiasi convalida eseguita dall'applicazione collegata.
Il materiale di lancio mostra spiegazioni visive basate sul codice e progetti interattivi, incluso output SVG animato a partire da un brief testuale. Sono artefatti di codice, anziché generazione di immagini raster. Un brief chiaro può definire cosa debba essere spiegato, come debba comportarsi la visualizzazione e quali dati debba rappresentare. Controlla il codice e la resa risultanti rispetto a quei requisiti. Per un compito di sintesi dei dati, fornisci le fonti effettive e chiedi un'unica vista che conservi le relazioni e le precisazioni presenti in esse.
I livelli di thinking documentati sono low, medium e high, con high come predefinito per 3.1 Pro Preview. Il thinking non può essere completamente disabilitato in questo profilo Pro. Scegli un impegno inferiore per una risposta delimitata e più ragionamento per attività difficili con più passaggi, lasciando una capacità di output sufficiente al risultato finale. Un limite ridotto di output può interrompere il ragionamento prima che appaia una risposta finale utilizzabile. La guida al thinking distingue un riepilogo del ragionamento dal processo interno completo e spiega perché conta il contesto delle thought signatures della conversazione.
La tabella dell'esatta Preview elenca chiamate di funzione, esecuzione di codice, grounding tramite ricerca, grounding tramite Maps, contesto URL e output strutturati. Limita File Search ad AI Studio. Fornisci scopi delle funzioni e definizioni dei parametri e prosegui dal risultato reale restituito. Il profilo separato Custom Tools Preview è ottimizzato per dare priorità agli strumenti personalizzati e a bash; è un endpoint distinto del produttore, con un nome proprio, quindi tale specializzazione non deve essere considerata implicitamente una proprietà di ogni richiesta 3.1 Pro. Seleziona uno schema di risultato strutturato quando un compito necessita di record definiti anziché di prosa libera.
Per l'analisi multimodale, identifica la pagina, l'elemento visivo, l'intervallo della registrazione o l'evento video pertinente. Per l'analisi documentale, confronta un diagramma con la sua specifica scritta e restituisci ogni discrepanza con il brano che la sostiene. Una fonte parlata può fornire una trascrizione o un'interpretazione testuale. Conserva i riferimenti alle fonti per le conclusioni da verificare e separa ciò che è visibile o dichiarato da ciò che è inferito. L'output di questo profilo resta testo, incluso codice; la generazione nativa di immagini o parlato non fa parte della sua esatta tabella delle capacità.
La scheda nativa 3.1 Pro specifica un contesto fino a 1M e output testuale di 64K, e la tabella dell'esatta API Preview indica 1,048,576 token di input e 65,536 token di output. Includi istruzioni, cronologia della conversazione e contenuti multimediali nel budget di input. Caching ed elaborazione batch sono documentati, con opzioni Flex e Priority anch'esse elencate per il profilo del produttore. Per più elementi indipendenti, definisci l'output richiesto e conserva ogni identificativo di fonte, anziché combinare prove non correlate in una risposta non tracciabile.
L'edizione denominata Preview resta distinta dal profilo Custom Tools di Pro e dalle versioni Flash o Pro successive. I suoi punti di forza riguardano ragionamento complesso, programmazione e sintesi delle prove; il risultato finale necessita comunque di verifica rispetto alla fonte e ai risultati effettivi degli strumenti. Conserva l'ambiguità irrisolta quando le informazioni fornite non supportano una conclusione definita. Un risultato utile è la risposta, il codice o il record supportato richiesto dal compito, con prove sufficienti a valutarne i limiti pratici.
Caso pratico
Caso pratico
Esempio tecnico in inglese
Review a cross-module date contract
Review this contract mismatch. Producer emits {due_date: "2026-11-03"}; consumer reads record.dueDate and displays "No date" when missing. Existing stored records use due_date. Propose the smallest compatible correction and tests for both present and absent dates. Preserve the producer field and do not add a second stored field.Risultato atteso
A short mismatch analysis, a focused consumer patch and tests covering the stored field and missing-value behavior.Verificare il risultato
Check that the patch reads due_date without changing persisted records or treating an absent date as a valid one.Ailoot · Anthropic Messages POST /v1/messages gemini-3.1-pro-preview
gemini-3.1-pro-previewIntroduzione
Gemini 3.1 Pro Preview è il modello di ragionamento multimodale di Google per compiti complessi di software, algoritmi e conoscenza. Accetta testo, immagini, audio, video e PDF e restituisce testo o codice, con strumenti e uscite strutturate. I livelli di ragionamento low, medium e high orientano l’impegno; high è il valore predefinito documentato.
- Input accettati
- Testo · Immagini
- Risultati
- Testo
Disponibile in Ailoot · input e metodi
Ailoot · Anthropic Messages POST /v1/messages
- Tipi di input
text,image- Tipi di output
text- Contesto
- 1.048.576 tokens
- Output massimo
- 65.536 tokens
- Formato di output
- json o SSE
| Campo | Tipo | Requisito | Valori e limiti | Predefinito |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObbligatorio | Valori e limiti gemini-3.1-pro-preview | Predefinito— |
Campomessages | Tipomessage[] | RequisitoObbligatorio | Valori e limiti Numero minimo di elementi: 1 | Predefinito— |
Campomessages[].role | Tipostring | RequisitoObbligatorio | Valori e limiti user, assistant | Predefinito— |
Campomessages[].content | Tipostring|content_block[] | RequisitoObbligatorio | Valori e limiti | Predefinito— |
Camposystem | Tipostring|content_block[] | RequisitoFacoltativo | Valori e limiti | Predefinito— |
Campomax_tokens | Tipointeger | RequisitoObbligatorio | Valori e limiti Minimo: 1 Il limite si applica a: Limite esatto del modello o della scheda selezionati | Predefinito— |
Campostream | Tipoboolean | RequisitoFacoltativo | Valori e limiti | Predefinitofalse |
Campotemperature | Tiponumber | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campotop_p | Tiponumber | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campostop_sequences | Tipostring[] | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campotools | Tipotool[] | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campotools[].name | Tipostring | RequisitoFacoltativo | Valori e limiti Si applica quando: Strumento fornito | Predefinito— |
Campotools[].description | Tipostring | RequisitoFacoltativo | Valori e limiti | Predefinito— |
Campotools[].input_schema | TipoJSON_schema | RequisitoFacoltativo | Valori e limiti | Predefinito— |
Campotool_choice | Tipoobject | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campothinking.type | Tipostring | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campothinking.budget_tokens | Tipointeger | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campooutput_config.effort | Tipostring | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campometadata | Tipoobject | RequisitoFacoltativo | Valori e limiti | Predefinito— |
Campocache_control | Tipoobject | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Combinazioni di materiali in input
Testo · Testo UTF8
messages[].content o blocco type=text
Testo + immagine
{type:image,source:{type:base64,media_type,data}} o origine type=url
Parametri e ciclo di vita del metodo
| Parametro | Contratto |
|---|---|
Parametromaterial_types | Contrattotext, image |
Parametrorequired | Contrattomodel, messages, max_tokens |
Parametrooptional_controls | Contrattonull |
Parametrocontent_type | Contrattoapplication/json |
Parametrotext_file_material | ContrattoContenuto UTF-8 effettivo inserito come testo; ID di file/URLs richiedono supporto separato ed esatto |
Ciclo di vita: exact retained published method
Le strutture dei metodi e gli ID sono esatti; la capacità del fornitore è distinta dall’ammissione delle richieste.
Tariffe
Tariffe dei metodi Ailoot
POST /v1/messages- Input
- 0,002 USD / 1K
- Output
- 0,012 USD / 1K
- Lettura dalla cache
- 0,0002 USD / 1K
Prezzi per lunghezza della richiesta · Anthropic Messages
| Dimensione della richiesta, in token | Input | Output | Lettura dalla cache | Scrittura nella cache | Cache 5 min | Cache 1 ora |
|---|---|---|---|---|---|---|
| Dimensione della richiesta, in token(0; 200.000] | Input0,002 USD | Output0,012 USD | Lettura dalla cache0,0002 USD | Scrittura nella cacheTariffa base: — | Cache 5 minTariffa base: — | Cache 1 oraTariffa base: — |
| Dimensione della richiesta, in token(200.000; ∞) | Input0,004 USD | Output0,018 USD | Lettura dalla cache0,0004 USD | Scrittura nella cacheTariffa base: — | Cache 5 minTariffa base: — | Cache 1 oraTariffa base: — |
Tariffe in USD per 1K token. Se non è impostata alcuna tariffa, viene ereditata la tariffa base di questo metodo; «—» indica che non è impostata alcuna tariffa base.
Ailoot prenota un importo stimato prima di una richiesta. Dopo il risultato, addebita il costo finale in base all’utilizzo misurato. Per lo streaming, l’addebito usa il record finale di utilizzo. Come funzionano la prenotazione e l’addebito finale →
Dettagli della tariffa di riferimento
I listini di riferimento del modello non modificano la selezione del metodo, i preventivi o gli addebiti. Gli addebiti attivi usano le tariffe del metodo Ailoot selezionato.
Listini di riferimento del modello
Prezzi per configurazione
Associa ogni costo alle condizioni indicate. Usa una sola tariffa per ogni insieme di configurazioni alternative.
| Configurazione | Listino delle tariffe | Token di contesto, più di | Token di contesto, fino al limite incluso | Costo |
|---|---|---|---|---|
| ConfigurazioneOpenAI Chat · Tariffe base per token | Listino delle tariffeTariffa base | Token di contesto, più di— | Token di contesto, fino al limite inclusoNessun limite superiore | Costo Input · Token in input $0.004 / 1K token Output · Token in output $0.024 / 1K token Input · Lettura dalla cache $0.0004 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token Output · Token di ragionamento in uscita $0.024 / 1K token |
| ConfigurazioneOpenAI Chat · Fascia 1 in base alla lunghezza della richiesta | Listino delle tariffe— | Token di contesto, più di0 | Token di contesto, fino al limite incluso200.000 | Costo Input · Token in input $0.004 / 1K token Output · Token in output $0.024 / 1K token Input · Lettura dalla cache $0.0004 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token |
| ConfigurazioneOpenAI Chat · Fascia 2 in base alla lunghezza della richiesta | Listino delle tariffe— | Token di contesto, più di200.000 | Token di contesto, fino al limite inclusoNessun limite superiore | Costo Input · Token in input $0.008 / 1K token Output · Token in output $0.036 / 1K token Input · Lettura dalla cache $0.0008 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token |
| ConfigurazioneAnthropic Messages · Tariffe base per token | Listino delle tariffeTariffa base | Token di contesto, più di— | Token di contesto, fino al limite inclusoNessun limite superiore | Costo Input · Token in input $0.004 / 1K token Output · Token in output $0.024 / 1K token Input · Lettura dalla cache $0.0004 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token Output · Token di ragionamento in uscita $0.024 / 1K token |
| ConfigurazioneAnthropic Messages · Fascia 1 in base alla lunghezza della richiesta | Listino delle tariffe— | Token di contesto, più di0 | Token di contesto, fino al limite incluso200.000 | Costo Input · Token in input $0.004 / 1K token Output · Token in output $0.024 / 1K token Input · Lettura dalla cache $0.0004 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token |
| ConfigurazioneAnthropic Messages · Fascia 2 in base alla lunghezza della richiesta | Listino delle tariffe— | Token di contesto, più di200.000 | Token di contesto, fino al limite inclusoNessun limite superiore | Costo Input · Token in input $0.008 / 1K token Output · Token in output $0.036 / 1K token Input · Lettura dalla cache $0.0008 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token |
Esempi di richieste
Ailoot · Anthropic Messages
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gemini-3.1-pro-preview", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
-H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gemini-3.1-pro-preview", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
-H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
import anthropic
import os
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
model="gemini-3.1-pro-preview",
max_tokens=1024,
messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(msg.to_dict(mode="json"))
import Anthropic from "@anthropic-ai/sdk";
if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
model: "gemini-3.1-pro-preview",
max_tokens: 1024,
messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";
function saveResult(data, stem = "result") {
writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
console.log(JSON.stringify(data, null, 2));
const saveBlob = (encoded, suffix, label) => {
const raw = Buffer.from(encoded, "base64");
const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
const file = `${stem}-${label}.${ext}`;
writeFileSync(file, raw); console.log("Saved", file);
};
for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
for (const [i, item] of (data.output || []).entries()) {
console.log("Output", i, JSON.stringify(item));
if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
}
for (const [ci, candidate] of (data.candidates || []).entries()) {
for (const [pi, part] of (candidate.content?.parts || []).entries()) {
console.log("Candidate/part", ci, pi, JSON.stringify(part));
const blob = part.inlineData || part.inline_data;
if (blob?.data) {
const mime = blob.mimeType || blob.mime_type;
const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
}
}
}
}
saveResult(msg);
import anthropic,os
from pathlib import Path
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
with client.messages.stream(model='gemini-3.1-pro-preview',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
for event in stream:
payload=event.to_dict(mode="json")
log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
print(json.dumps(payload,ensure_ascii=False))
final=stream.get_final_message()
save_result(final.to_dict(mode="json"),"stream-result")
Ricevi e salva i risultati
Ailoot · Anthropic Messages
json o SSE
Conserva tutti i risultati completati
Conserva ogni risposta, file e parte di contenuto restituiti per intero.
Conserva tutti i blocchi di contenuto, le firme di ragionamento e gli ID effettivi di utilizzo degli strumenti. Assembla tutti i delta dei blocchi SSE; il primo blocco di testo non è l’uscita completa.
Se occorre verificare la risposta originale
Conserva gli ID e le intestazioni di richiesta/risposta. Non viene fornito alcun URL generico per recuperare un’attività testuale.
Campi della risposta
| Campo | Tipo |
|---|---|
Campoid | Tipostring |
Campomodel | Tipostring |
Campocontent[] | Tipotext|thinking|tool_use|other content block |
Campostop_reason | Tipostring|null |
Campousage | Tipoobject |
Errori e passaggi successivi
| Risposta | Condizione | Passaggio successivo |
|---|---|---|
Risposta400 · invalid_request_error | CondizioneCampi obbligatori, rappresentazione del materiale o valore del parametro non validi | Passaggio successivoCorreggi i campi indicati prima di una nuova richiesta di creazione. |
Alias
Alias del modello
Ailoot gemini-3.1-pro-preview
Ailoot Ultra gemini-3.1-pro-preview, google/gemini-3.1-pro-preview~google/gemini-pro-latest
Alias dei percorsi dei metodi
/chat/completions
ID di chiamata correlati
google/gemini-3.1-pro-preview, ~google/gemini-pro-latest, gemini-3.1-pro-preview, gemini-3.1-pro-preview
Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent gemini-3.1-pro-preview
gemini-3.1-pro-previewIntroduzione
Gemini 3.1 Pro Preview è il modello di ragionamento multimodale di Google per compiti complessi di software, algoritmi e conoscenza. Accetta testo, immagini, audio, video e PDF e restituisce testo o codice, con strumenti e uscite strutturate. I livelli di ragionamento low, medium e high orientano l’impegno; high è il valore predefinito documentato.
- Input accettati
- Testo · Immagini
- Risultati
- Testo
Disponibile in Ailoot · input e metodi
Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent
- Tipi di input
text,image- Tipi di output
text- Contesto
- 1.048.576 tokens
- Output massimo
- 65.536 tokens
- Formato di output
- json o streaming supportato
| Campo | Tipo | Requisito | Valori e limiti | Predefinito |
|---|---|---|---|---|
Campopath.model | Tipostring | RequisitoObbligatorio | Valori e limiti gemini-3.1-pro-preview | Predefinito— |
Campocontents | Tipocontent[] | RequisitoObbligatorio | Valori e limiti Numero minimo di elementi: 1 | Predefinito— |
Campocontents[].role | Tipostring | RequisitoFacoltativo | Valori e limiti user, model | Predefinito— |
Campocontents[].parts | Tipopart[] | RequisitoObbligatorio | Valori e limiti | Predefinito— |
CamposystemInstruction | Tipocontent | RequisitoFacoltativo | Valori e limiti | Predefinito— |
CampogenerationConfig.maxOutputTokens | Tipointeger | RequisitoFacoltativo | Valori e limiti Minimo: 1 Dipende dal modello | Predefinito— |
CampogenerationConfig.temperature | Tiponumber | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
CampogenerationConfig.topP | Tiponumber | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
CampogenerationConfig.topK | Tipointeger | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
CampogenerationConfig.stopSequences | Tipostring[] | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
CampogenerationConfig.thinkingConfig.includeThoughts | Tipoboolean | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
CampogenerationConfig.thinkingConfig.thinkingBudget | Tipointeger | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campotools[].functionDeclarations | Tipofunction_declaration[] | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
CampotoolConfig.functionCallingConfig.mode | Tipostring | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
CamposafetySettings | Tipoobject[] | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
CamposessionId | Tipostring | RequisitoFacoltativo | Valori e limiti | Predefinito— |
Combinazioni di materiali in input
Testo · Testo UTF8
contents[].parts[].text
Testo + immagine
parts[].inlineData={mimeType,data}
Parametri e ciclo di vita del metodo
| Parametro | Contratto |
|---|---|
Parametromaterial_types | Contrattotext, image |
Parametrorequired | Contrattocontents |
Parametrooptional_controls | Contrattonull |
Parametrocontent_type | Contrattoapplication/json |
Parametrotext_file_material | ContrattoContenuto UTF-8 effettivo inserito come testo; ID di file/URLs richiedono supporto separato ed esatto |
Ciclo di vita: exact retained published method
Le strutture dei metodi e gli ID sono esatti; la capacità del fornitore è distinta dall’ammissione delle richieste.
Tariffe
Tariffe dei metodi Ailoot
POST /v1beta/models/{model}:generateContent- Input
- 0,002 USD / 1K
- Output
- 0,012 USD / 1K
- Lettura dalla cache
- 0,0002 USD / 1K
Prezzi per lunghezza della richiesta · Gemini generateContent
| Dimensione della richiesta, in token | Input | Output | Lettura dalla cache | Scrittura nella cache | Cache 5 min | Cache 1 ora |
|---|---|---|---|---|---|---|
| Dimensione della richiesta, in token(0; 200.000] | Input0,002 USD | Output0,012 USD | Lettura dalla cache0,0002 USD | Scrittura nella cacheTariffa base: — | Cache 5 minTariffa base: — | Cache 1 oraTariffa base: — |
| Dimensione della richiesta, in token(200.000; ∞) | Input0,004 USD | Output0,018 USD | Lettura dalla cache0,0004 USD | Scrittura nella cacheTariffa base: — | Cache 5 minTariffa base: — | Cache 1 oraTariffa base: — |
Tariffe in USD per 1K token. Se non è impostata alcuna tariffa, viene ereditata la tariffa base di questo metodo; «—» indica che non è impostata alcuna tariffa base.
Ailoot prenota un importo stimato prima di una richiesta. Dopo il risultato, addebita il costo finale in base all’utilizzo misurato. Per lo streaming, l’addebito usa il record finale di utilizzo. Come funzionano la prenotazione e l’addebito finale →
Dettagli della tariffa di riferimento
I listini di riferimento del modello non modificano la selezione del metodo, i preventivi o gli addebiti. Gli addebiti attivi usano le tariffe del metodo Ailoot selezionato.
Listini di riferimento del modello
Prezzi per configurazione
Associa ogni costo alle condizioni indicate. Usa una sola tariffa per ogni insieme di configurazioni alternative.
| Configurazione | Listino delle tariffe | Token di contesto, più di | Token di contesto, fino al limite incluso | Costo |
|---|---|---|---|---|
| ConfigurazioneOpenAI Chat · Tariffe base per token | Listino delle tariffeTariffa base | Token di contesto, più di— | Token di contesto, fino al limite inclusoNessun limite superiore | Costo Input · Token in input $0.004 / 1K token Output · Token in output $0.024 / 1K token Input · Lettura dalla cache $0.0004 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token Output · Token di ragionamento in uscita $0.024 / 1K token |
| ConfigurazioneOpenAI Chat · Fascia 1 in base alla lunghezza della richiesta | Listino delle tariffe— | Token di contesto, più di0 | Token di contesto, fino al limite incluso200.000 | Costo Input · Token in input $0.004 / 1K token Output · Token in output $0.024 / 1K token Input · Lettura dalla cache $0.0004 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token |
| ConfigurazioneOpenAI Chat · Fascia 2 in base alla lunghezza della richiesta | Listino delle tariffe— | Token di contesto, più di200.000 | Token di contesto, fino al limite inclusoNessun limite superiore | Costo Input · Token in input $0.008 / 1K token Output · Token in output $0.036 / 1K token Input · Lettura dalla cache $0.0008 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token |
| ConfigurazioneAnthropic Messages · Tariffe base per token | Listino delle tariffeTariffa base | Token di contesto, più di— | Token di contesto, fino al limite inclusoNessun limite superiore | Costo Input · Token in input $0.004 / 1K token Output · Token in output $0.024 / 1K token Input · Lettura dalla cache $0.0004 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token Output · Token di ragionamento in uscita $0.024 / 1K token |
| ConfigurazioneAnthropic Messages · Fascia 1 in base alla lunghezza della richiesta | Listino delle tariffe— | Token di contesto, più di0 | Token di contesto, fino al limite incluso200.000 | Costo Input · Token in input $0.004 / 1K token Output · Token in output $0.024 / 1K token Input · Lettura dalla cache $0.0004 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token |
| ConfigurazioneAnthropic Messages · Fascia 2 in base alla lunghezza della richiesta | Listino delle tariffe— | Token di contesto, più di200.000 | Token di contesto, fino al limite inclusoNessun limite superiore | Costo Input · Token in input $0.008 / 1K token Output · Token in output $0.036 / 1K token Input · Lettura dalla cache $0.0008 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token |
Esempi di richieste
Ailoot · Gemini generateContent
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"contents": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["contents"]=[{"role":"user","parts":[{"text":"Summarize this material and quote supporting source passages.\n\n"+text}]}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1beta/models/gemini-3.1-pro-preview:generateContent \
-H "x-goog-api-key: $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"contents": [{"role": "user", "parts": [{"text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["contents"][0]["parts"].append({"inlineData":{"mimeType":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1beta/models/gemini-3.1-pro-preview:generateContent \
-H "x-goog-api-key: $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
from google import genai
from google.genai import types
import os
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = genai.Client(
api_key=os.environ["AILOOT_API_KEY"],
http_options=types.HttpOptions(base_url="https://api.ailoot.ai"),
)
resp = client.models.generate_content(model="gemini-3.1-pro-preview", contents="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(resp.to_json_dict())
import { GoogleGenAI } from "@google/genai";
if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const ai = new GoogleGenAI({ apiKey: process.env.AILOOT_API_KEY, httpOptions: { baseUrl: "https://api.ailoot.ai" } });
const resp = await ai.models.generateContent({ model: "gemini-3.1-pro-preview", contents: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";
function saveResult(data, stem = "result") {
writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
console.log(JSON.stringify(data, null, 2));
const saveBlob = (encoded, suffix, label) => {
const raw = Buffer.from(encoded, "base64");
const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
const file = `${stem}-${label}.${ext}`;
writeFileSync(file, raw); console.log("Saved", file);
};
for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
for (const [i, item] of (data.output || []).entries()) {
console.log("Output", i, JSON.stringify(item));
if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
}
for (const [ci, candidate] of (data.candidates || []).entries()) {
for (const [pi, part] of (candidate.content?.parts || []).entries()) {
console.log("Candidate/part", ci, pi, JSON.stringify(part));
const blob = part.inlineData || part.inline_data;
if (blob?.data) {
const mime = blob.mimeType || blob.mime_type;
const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
}
}
}
}
saveResult(resp);
from google import genai
from google.genai import types
import os
from pathlib import Path
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=genai.Client(api_key=os.environ["AILOOT_API_KEY"],http_options=types.HttpOptions(base_url="https://api.ailoot.ai"))
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
count=0
with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
for chunk in client.models.generate_content_stream(model='gemini-3.1-pro-preview',contents="Explain observations and hypotheses in three sentences."):
payload=chunk.to_json_dict()
log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
save_result(payload,"stream-chunk-"+str(count))
count+=1
Ricevi e salva i risultati
Ailoot · Gemini generateContent
json o streaming supportato
Conserva tutti i risultati completati
Conserva ogni risposta, file e parte di contenuto restituiti per intero.
Conserva tutti i candidati e le parti, comprese le chiamate a funzione, le firme di ragionamento e i dati di utilizzo; assembla i frammenti del flusso nell’ordine.
Se occorre verificare la risposta originale
Conserva gli ID e le intestazioni di richiesta/risposta. Non viene fornito alcun URL generico per recuperare un’attività testuale.
Campi della risposta
| Campo | Tipo |
|---|---|
CamporesponseId | Tipostring |
CampomodelVersion | Tipostring |
Campocandidates[].content.parts[] | Tipotext|inlineData|functionCall|other part |
Campocandidates[].finishReason | Tipostring |
CampousageMetadata | Tipoobject |
Errori e passaggi successivi
| Risposta | Condizione | Passaggio successivo |
|---|---|---|
Risposta400 · invalid_request_error | CondizioneCampi obbligatori, rappresentazione del materiale o valore del parametro non validi | Passaggio successivoCorreggi i campi indicati prima di una nuova richiesta di creazione. |
Alias
Alias del modello
Ailoot gemini-3.1-pro-preview
Ailoot Ultra gemini-3.1-pro-preview, google/gemini-3.1-pro-preview~google/gemini-pro-latest
Alias dei percorsi dei metodi
/chat/completions
ID di chiamata correlati
google/gemini-3.1-pro-preview, ~google/gemini-pro-latest, gemini-3.1-pro-preview, gemini-3.1-pro-preview
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions gemini-3.1-pro-preview
gemini-3.1-pro-previewgemini-3.1-pro-previewgoogle/gemini-3.1-pro-preview
Introduzione
Gemini 3.1 Pro Preview è il modello di ragionamento multimodale di Google per compiti complessi di software, algoritmi e conoscenza. Accetta testo, immagini, audio, video e PDF e restituisce testo o codice, con strumenti e uscite strutturate. I livelli di ragionamento low, medium e high orientano l’impegno; high è il valore predefinito documentato.
- Input accettati
- Testo
- Risultati
- Testo
Disponibile in Ailoot · input e metodi
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
- Tipi di input
text- Tipi di output
text- Formato di output
- json o SSE
| Campo | Tipo | Requisito | Valori e limiti | Predefinito |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObbligatorio | Valori e limiti gemini-3.1-pro-preview | Predefinito— |
Campomessages | Tipomessage[] | RequisitoObbligatorio | Valori e limiti Numero minimo di elementi: 1 | Predefinito— |
Campomessages[].role | Tipostring | RequisitoObbligatorio | Valori e limiti Dipende dal modello | Predefinito— |
Campomessages[].content | Tipostring | RequisitoFacoltativo | Valori e limiti Si applica quando: Conversazione testuale | Predefinito— |
Campostream | Tipoboolean | RequisitoFacoltativo | Valori e limiti | Predefinitofalse |
Combinazioni di materiali in input
Testo · Testo UTF8
messages[].content
Parametri e ciclo di vita del metodo
| Parametro | Contratto |
|---|---|
Parametrocontent_type | Contrattoapplication/json |
Parametrorequired | Contrattomodel, messages |
Parametromaterial_types | Contrattotext |
Parametromessages | ContrattoArray di messaggi con struttura role/content |
Parametrofile_material | ContrattoDocumento UTF-8 effettivo inserito come testo letterale; nessun ID di file dedotto |
Parametrooptional_controls | Contrattostream |
Parametrocontrol_scope | ContrattoConversazione testuale; stream è un booleano e per impostazione predefinita vale false. |
Parametrooutput_modalities | Contrattotext |
Parametrohosted_operations | Contrattofalse |
Parametromultimodal_input_binding | Contrattonull |
Alias del metodo: /chat/completions
Ciclo di vita: synchronous_or_streamed
Invia l’ID esatto del modello con messages.
La lunghezza del contesto non è un limite di uscita.
Un file di testo può fornire testo letterale; gli ingressi immagine/audio/oggetto file richiedono un’associazione esatta.
Tariffe
Le tariffe non aggiungono opzioni alla richiesta. I parametri supportati sono elencati nel metodo selezionato.
- Modalità rapida
- Tariffa standard Quando è selezionata la modalità rapida
- Modalità flex
- Tariffa standard Quando è selezionata la modalità flex
- Sforzo massimo di ragionamento
- Tariffa standard Quando lo sforzo massimo di ragionamento usa l'adeguamento predefinito (default)
- Sforzo di ragionamento · elevato
- Tariffa standard Quando lo sforzo di ragionamento è elevato
- Sforzo di ragionamento · basso
- Tariffa standard Quando lo sforzo di ragionamento è basso
- Sforzo di ragionamento · medio
- Tariffa standard Quando lo sforzo di ragionamento è medio
- Tariffe della cache esplicita
- Non abilitato Quando viene richiesta una cache esplicita
- Output di ragionamento
- Al ragionamento si applica la tariffa elencata per il sottoinsieme all'interno dell'output aggregato; non conteggiare quei token due volte. Quando l'output include token di ragionamento
Tariffe Ailoot
Prezzi per configurazione
Associa ogni costo alle condizioni indicate. Usa una sola tariffa per ogni insieme di configurazioni alternative.
| Configurazione | Listino delle tariffe | Token di contesto, più di | Token di contesto, fino al limite incluso | Costo |
|---|---|---|---|---|
| ConfigurazioneTariffe di base dei token | Listino delle tariffeTariffa base | Token di contesto, più di— | Token di contesto, fino al limite inclusoNessun limite superiore | Costo Input · Token in input $0.004 / 1K token Output · Token in output $0.024 / 1K token Input · Lettura dalla cache $0.0004 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token Output · Token di ragionamento in uscita $0.024 / 1K token |
| ConfigurazioneFascia 1 di lunghezza della richiesta | Listino delle tariffe— | Token di contesto, più di0 | Token di contesto, fino al limite incluso200.000 | Costo Input · Token in input $0.004 / 1K token Output · Token in output $0.024 / 1K token Input · Lettura dalla cache $0.0004 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token |
| ConfigurazioneFascia 2 di lunghezza della richiesta | Listino delle tariffe— | Token di contesto, più di200.000 | Token di contesto, fino al limite inclusoNessun limite superiore | Costo Input · Token in input $0.008 / 1K token Output · Token in output $0.036 / 1K token Input · Lettura dalla cache $0.0008 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token |
Ailoot prenota un importo stimato prima di una richiesta. Dopo il risultato, addebita il costo finale in base all’utilizzo misurato. Per lo streaming, l’addebito usa il record finale di utilizzo. Come funzionano la prenotazione e l’addebito finale →
Esempi di richieste
Ailoot Ultra · OpenAI Chat
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model":"gemini-3.1-pro-preview","messages":[{"role":"user","content":"hello"}],"stream":false}')
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model="gemini-3.1-pro-preview", messages=[{"role":"user","content":"hello"}], stream=False)
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(result.to_dict(mode="json"))
Ricevi e salva i risultati
Ailoot Ultra · OpenAI Chat
json o SSE
Conserva tutti i risultati completati
Conserva ogni risposta, file e parte di contenuto restituiti per intero.
Conserva ogni scelta con contenuto, chiamate agli strumenti e ragionamento. In SSE assembla i delta per indice di scelta e strumento e conserva il motivo finale di completamento e i dati di utilizzo.
Se occorre verificare la risposta originale
Conserva gli ID e le intestazioni di richiesta/risposta. Non viene fornito alcun URL generico per recuperare un’attività testuale.
Campi della risposta
| Campo | Tipo |
|---|---|
Campochoices[].index | Tipointeger |
Campochoices[].message.content | Tipostring|null |
Campochoices[].message.tool_calls | Tipotool_call[] |
Campochoices[].message.reasoning_content | Tipostring |
Campochoices[].message.reasoning_details | Tipoobject|array |
Campochoices[].finish_reason | Tipostring|null |
Campousage | Tipoobject |
Errori e passaggi successivi
| Risposta | Condizione | Passaggio successivo |
|---|---|---|
Risposta400 · invalid_request_error | CondizioneCampi obbligatori, rappresentazione del materiale o valore del parametro non validi | Passaggio successivoCorreggi i campi indicati prima di una nuova richiesta di creazione. |
Alias
Alias del modello
Ailoot gemini-3.1-pro-preview
Ailoot Ultra gemini-3.1-pro-preview, google/gemini-3.1-pro-preview~google/gemini-pro-latest
Alias dei percorsi dei metodi
/chat/completions
ID di chiamata correlati
google/gemini-3.1-pro-preview, ~google/gemini-pro-latest, gemini-3.1-pro-preview, gemini-3.1-pro-preview
Ailoot Ultra · Anthropic Messages POST /v1/messages gemini-3.1-pro-preview
gemini-3.1-pro-previewgemini-3.1-pro-previewgoogle/gemini-3.1-pro-preview
Introduzione
Gemini 3.1 Pro Preview è il modello di ragionamento multimodale di Google per compiti complessi di software, algoritmi e conoscenza. Accetta testo, immagini, audio, video e PDF e restituisce testo o codice, con strumenti e uscite strutturate. I livelli di ragionamento low, medium e high orientano l’impegno; high è il valore predefinito documentato.
- Input accettati
- Testo
- Risultati
- json · sse
Disponibile in Ailoot · input e metodi
Ailoot Ultra · Anthropic Messages POST /v1/messages
- Tipi di input
text- Tipi di output
json,sse- Formato di output
- JSON o SSE
| Campo | Tipo | Requisito | Valori e limiti | Predefinito |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObbligatorio | Valori e limiti gemini-3.1-pro-preview | Predefinito— |
Campomessages | Tipomessage[] | RequisitoObbligatorio | Valori e limiti | Predefinito— |
Campomessages[].role | Tipostring | RequisitoObbligatorio | Valori e limiti user, assistant | Predefinito— |
Campomessages[].content | Tipostring | RequisitoObbligatorio | Valori e limiti | Predefinito— |
Campomax_tokens | Tipointeger | RequisitoObbligatorio | Valori e limiti | Predefinito— |
Campostream | Tipoboolean | RequisitoFacoltativo | Valori e limiti | Predefinitofalse |
Combinazioni di materiali in input
Testo · Testo UTF-8
Stringa messages[].content
Parametri e ciclo di vita del metodo
| Parametro | Contratto |
|---|---|
Parametrocontent_type | Contrattoapplication/json |
Parametrorequired | Contrattomodel, messages, max_tokens |
Parametrooptional_controls | Contrattostream |
Parametromaterial_types | Contrattotext |
Parametrotext_file_material | ContrattoLeggi il documento UTF-8 effettivo e inserisci il testo nell’ingresso indicato o nella stringa del contenuto del messaggio. |
Ciclo di vita: synchronous_or_streamed
Tariffe
Le tariffe non aggiungono opzioni alla richiesta. I parametri supportati sono elencati nel metodo selezionato.
- Modalità rapida
- Tariffa standard Quando è selezionata la modalità rapida
- Modalità flex
- Tariffa standard Quando è selezionata la modalità flex
- Sforzo massimo di ragionamento
- Tariffa standard Quando lo sforzo massimo di ragionamento usa l'adeguamento predefinito (default)
- Sforzo di ragionamento · elevato
- Tariffa standard Quando lo sforzo di ragionamento è elevato
- Sforzo di ragionamento · basso
- Tariffa standard Quando lo sforzo di ragionamento è basso
- Sforzo di ragionamento · medio
- Tariffa standard Quando lo sforzo di ragionamento è medio
- Tariffe della cache esplicita
- Non abilitato Quando viene richiesta una cache esplicita
- Output di ragionamento
- Al ragionamento si applica la tariffa elencata per il sottoinsieme all'interno dell'output aggregato; non conteggiare quei token due volte. Quando l'output include token di ragionamento
Tariffe Ailoot
Prezzi per configurazione
Associa ogni costo alle condizioni indicate. Usa una sola tariffa per ogni insieme di configurazioni alternative.
| Configurazione | Listino delle tariffe | Token di contesto, più di | Token di contesto, fino al limite incluso | Costo |
|---|---|---|---|---|
| ConfigurazioneTariffe di base dei token | Listino delle tariffeTariffa base | Token di contesto, più di— | Token di contesto, fino al limite inclusoNessun limite superiore | Costo Input · Token in input $0.004 / 1K token Output · Token in output $0.024 / 1K token Input · Lettura dalla cache $0.0004 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token Output · Token di ragionamento in uscita $0.024 / 1K token |
| ConfigurazioneFascia 1 di lunghezza della richiesta | Listino delle tariffe— | Token di contesto, più di0 | Token di contesto, fino al limite incluso200.000 | Costo Input · Token in input $0.004 / 1K token Output · Token in output $0.024 / 1K token Input · Lettura dalla cache $0.0004 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token |
| ConfigurazioneFascia 2 di lunghezza della richiesta | Listino delle tariffe— | Token di contesto, più di200.000 | Token di contesto, fino al limite inclusoNessun limite superiore | Costo Input · Token in input $0.008 / 1K token Output · Token in output $0.036 / 1K token Input · Lettura dalla cache $0.0008 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token |
Ailoot prenota un importo stimato prima di una richiesta. Dopo il risultato, addebita il costo finale in base all’utilizzo misurato. Per lo streaming, l’addebito usa il record finale di utilizzo. Come funzionano la prenotazione e l’addebito finale →
Esempi di richieste
Ailoot Ultra · Anthropic Messages
{
"model": "gemini-3.1-pro-preview",
"max_tokens": 128,
"messages": [
{
"role": "user",
"content": "Summarize the incident report."
}
],
"stream": false
}set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'gemini-3.1-pro-preview', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
-H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'gemini-3.1-pro-preview', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError
api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
with urlopen(request, timeout=120) as response:
raw = response.read()
Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
Path('result.json').write_bytes(error.read())
Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
Ricevi e salva i risultati
Ailoot Ultra · Anthropic Messages
JSON o SSE
Conserva tutti i risultati completati
Conserva ogni risposta, file e parte di contenuto restituiti per intero.
Conserva tutti i blocchi di contenuto, le firme di ragionamento e gli ID effettivi di utilizzo degli strumenti. Assembla tutti i delta dei blocchi SSE; il primo blocco di testo non è l’uscita completa.
Se occorre verificare la risposta originale
Conserva gli ID e le intestazioni di richiesta/risposta. Non viene fornito alcun URL generico per recuperare un’attività testuale.
Campi della risposta
| Campo | Tipo |
|---|---|
Campoid | Tipostring |
Campomodel | Tipostring |
Campocontent[] | Tipotext|thinking|tool_use|other content block |
Campostop_reason | Tipostring|null |
Campousage | Tipoobject |
Errori e passaggi successivi
| Risposta | Condizione | Passaggio successivo |
|---|---|---|
Risposta400 · invalid_request_error | CondizioneCampi obbligatori, rappresentazione del materiale o valore del parametro non validi | Passaggio successivoCorreggi i campi indicati prima di una nuova richiesta di creazione. |
Alias
Alias del modello
Ailoot gemini-3.1-pro-preview
Ailoot Ultra gemini-3.1-pro-preview, google/gemini-3.1-pro-preview~google/gemini-pro-latest
Alias dei percorsi dei metodi
/chat/completions
ID di chiamata correlati
google/gemini-3.1-pro-preview, ~google/gemini-pro-latest, gemini-3.1-pro-preview, gemini-3.1-pro-preview
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions google/gemini-3.1-pro-preview
google/gemini-3.1-pro-previewgemini-3.1-pro-previewgoogle/gemini-3.1-pro-preview
Introduzione
Gemini 3.1 Pro Preview è il modello di ragionamento multimodale di Google per compiti complessi di software, algoritmi e conoscenza. Accetta testo, immagini, audio, video e PDF e restituisce testo o codice, con strumenti e uscite strutturate. I livelli di ragionamento low, medium e high orientano l’impegno; high è il valore predefinito documentato.
- Input accettati
- Testo
- Risultati
- Testo
Disponibile in Ailoot · input e metodi
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
- Tipi di input
text- Tipi di output
text- Formato di output
- json o SSE
| Campo | Tipo | Requisito | Valori e limiti | Predefinito |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObbligatorio | Valori e limiti google/gemini-3.1-pro-preview | Predefinito— |
Campomessages | Tipomessage[] | RequisitoObbligatorio | Valori e limiti Numero minimo di elementi: 1 | Predefinito— |
Campomessages[].role | Tipostring | RequisitoObbligatorio | Valori e limiti Esempi: system, user, assistant, tool, function Condizioni: Questi ruoli sono rappresentati esplicitamente dai tipi di compatibilità del codice sorgente; l’insieme esatto dei ruoli rimane specifico del modello. Dipende dal modello | Predefinito— |
Campomessages[].content | Tipostring|content_part[]|null | RequisitoFacoltativo | Valori e limiti | Predefinito— |
Campomessages[].tool_calls | Tipotool_call[] | RequisitoFacoltativo | Valori e limiti | Predefinito— |
Campomessages[].tool_call_id | Tipostring | RequisitoFacoltativo | Valori e limiti Si applica quando: role=tool; usa l’ID effettivamente restituito | Predefinito— |
Campomessages[].name | Tipostring | RequisitoFacoltativo | Valori e limiti | Predefinito— |
Campomessages[].reasoning_content | Tipostring | RequisitoFacoltativo | Valori e limiti Si applica quando: Reinserisci il ragionamento effettivamente restituito quando il modello lo utilizza | Predefinito— |
Campomessages[].reasoning_details | Tipoobject|array | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campomax_tokens | Tipointeger | RequisitoFacoltativo | Valori e limiti Minimo: 1 Dipende dal modello | Predefinito— |
Campomax_completion_tokens | Tipointeger | RequisitoFacoltativo | Valori e limiti Minimo: 1 Dipende dal modello | Predefinito— |
Campostream | Tipoboolean | RequisitoFacoltativo | Valori e limiti | Predefinitofalse |
Campostream_options.include_usage | Tipoboolean | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campotemperature | Tiponumber | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campotop_p | Tiponumber | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campostop | Tipostring|string[] | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campotools | Tipofunction_tool[] | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campotools[].type | Tipostring | RequisitoFacoltativo | Valori e limiti function Dipende dal modello | Predefinito— |
Campotools[].function.name | Tipostring | RequisitoObbligatorio | Valori e limiti Si applica quando: Funzione fornita come strumento | Predefinito— |
Campotools[].function.description | Tipostring | RequisitoFacoltativo | Valori e limiti | Predefinito— |
Campotools[].function.parameters | TipoJSON_schema | RequisitoFacoltativo | Valori e limiti | Predefinito— |
Campotool_choice | Tipostring|object | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campoparallel_tool_calls | Tipoboolean | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Camporesponse_format | Tipoobject | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Camporeasoning_effort | Tipostring | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Camporeasoning | Tipoobject | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Camposervice_tier | Tipostring | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campoinstructions | Tipostring | RequisitoFacoltativo | Valori e limiti Campo di compatibilità | Predefinito— |
Campofunctions | Tipofunction[] | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campofunction_call | Tipostring|object | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campoprompt_cache_options | Tipoobject | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campomodalities | Tipostring[] | RequisitoFacoltativo | Valori e limiti text | Predefinito— |
Campoprovider | Tipoobject | RequisitoFacoltativo | Valori e limiti Condizioni: provider.options viene rifiutato su questa rotta testuale Ultra | Predefinito— |
Campocache_control.ttl | Tipostring | RequisitoFacoltativo | Valori e limiti Condizioni: 1h viene rifiutato nelle posizioni effettive della cache dei prompt | Predefinito— |
Combinazioni di materiali in input
Testo · Testo UTF8
messages[].content
Parametri e ciclo di vita del metodo
| Parametro | Contratto |
|---|---|
Parametrocontent_type | Contrattoapplication/json |
Parametrorequired | Contrattomodel, messages |
Parametromaterial_types | Contrattotext |
Parametromessages | ContrattoArray di messaggi con struttura role/content |
Parametrofile_material | ContrattoDocumento UTF-8 effettivo inserito come testo letterale; nessun ID di file dedotto |
Parametrooptional_controls | Contrattostream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice |
Parametrocontrol_scope | ContrattoSpecifico del modello; gli strumenti di funzione dell’utente differiscono dagli strumenti ospitati |
Parametrooutput_modalities | Contrattotext |
Parametrohosted_operations | Contrattofalse |
Parametromultimodal_input_binding | Contrattonull |
Ciclo di vita: synchronous_or_streamed
Invia l’ID esatto del modello con messages.
La lunghezza del contesto non è un limite di uscita.
Un file di testo può fornire testo letterale; gli ingressi immagine/audio/oggetto file richiedono un’associazione esatta.
Tariffe
Le tariffe non aggiungono opzioni alla richiesta. I parametri supportati sono elencati nel metodo selezionato.
- Modalità rapida
- Tariffa standard Quando è selezionata la modalità rapida
- Modalità flex
- Tariffa standard Quando è selezionata la modalità flex
- Sforzo massimo di ragionamento
- Tariffa standard Quando lo sforzo massimo di ragionamento usa l'adeguamento predefinito (default)
- Sforzo di ragionamento · elevato
- Tariffa standard Quando lo sforzo di ragionamento è elevato
- Sforzo di ragionamento · basso
- Tariffa standard Quando lo sforzo di ragionamento è basso
- Sforzo di ragionamento · medio
- Tariffa standard Quando lo sforzo di ragionamento è medio
- Tariffe della cache esplicita
- Non abilitato Quando viene richiesta una cache esplicita
- Output di ragionamento
- Al ragionamento si applica la tariffa elencata per il sottoinsieme all'interno dell'output aggregato; non conteggiare quei token due volte. Quando l'output include token di ragionamento
Tariffe Ailoot
Prezzi per configurazione
Associa ogni costo alle condizioni indicate. Usa una sola tariffa per ogni insieme di configurazioni alternative.
| Configurazione | Listino delle tariffe | Token di contesto, più di | Token di contesto, fino al limite incluso | Costo |
|---|---|---|---|---|
| ConfigurazioneTariffe di base dei token | Listino delle tariffeTariffa base | Token di contesto, più di— | Token di contesto, fino al limite inclusoNessun limite superiore | Costo Input · Token in input $0.004 / 1K token Output · Token in output $0.024 / 1K token Input · Lettura dalla cache $0.0004 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token Output · Token di ragionamento in uscita $0.024 / 1K token |
| ConfigurazioneFascia 1 di lunghezza della richiesta | Listino delle tariffe— | Token di contesto, più di0 | Token di contesto, fino al limite incluso200.000 | Costo Input · Token in input $0.004 / 1K token Output · Token in output $0.024 / 1K token Input · Lettura dalla cache $0.0004 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token |
| ConfigurazioneFascia 2 di lunghezza della richiesta | Listino delle tariffe— | Token di contesto, più di200.000 | Token di contesto, fino al limite inclusoNessun limite superiore | Costo Input · Token in input $0.008 / 1K token Output · Token in output $0.036 / 1K token Input · Lettura dalla cache $0.0008 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token |
Ailoot prenota un importo stimato prima di una richiesta. Dopo il risultato, addebita il costo finale in base all’utilizzo misurato. Per lo streaming, l’addebito usa il record finale di utilizzo. Come funzionano la prenotazione e l’addebito finale →
Esempi di richieste
Ailoot Ultra · OpenAI Chat
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "google/gemini-3.1-pro-preview", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='google/gemini-3.1-pro-preview',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(result.to_dict(mode="json"))
from openai import OpenAI
import os
from pathlib import Path
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
with client.chat.completions.stream(model='google/gemini-3.1-pro-preview',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
for event in stream:
payload=event.to_dict(mode="json")
log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
print(json.dumps(payload,ensure_ascii=False))
final=stream.get_final_completion()
save_result(final.to_dict(mode="json"),"stream-result")
Ricevi e salva i risultati
Ailoot Ultra · OpenAI Chat
json o SSE
Conserva tutti i risultati completati
Conserva ogni risposta, file e parte di contenuto restituiti per intero.
Conserva ogni scelta con contenuto, chiamate agli strumenti e ragionamento. In SSE assembla i delta per indice di scelta e strumento e conserva il motivo finale di completamento e i dati di utilizzo.
Se occorre verificare la risposta originale
Conserva gli ID e le intestazioni di richiesta/risposta. Non viene fornito alcun URL generico per recuperare un’attività testuale.
Campi della risposta
| Campo | Tipo |
|---|---|
Campochoices[].index | Tipointeger |
Campochoices[].message.content | Tipostring|null |
Campochoices[].message.tool_calls | Tipotool_call[] |
Campochoices[].message.reasoning_content | Tipostring |
Campochoices[].message.reasoning_details | Tipoobject|array |
Campochoices[].finish_reason | Tipostring|null |
Campousage | Tipoobject |
Errori e passaggi successivi
| Risposta | Condizione | Passaggio successivo |
|---|---|---|
Risposta400 · invalid_request_error | CondizioneCampi obbligatori, rappresentazione del materiale o valore del parametro non validi | Passaggio successivoCorreggi i campi indicati prima di una nuova richiesta di creazione. |
Alias
Alias del modello
Ailoot gemini-3.1-pro-preview
Ailoot Ultra gemini-3.1-pro-preview, google/gemini-3.1-pro-preview~google/gemini-pro-latest
Alias dei percorsi dei metodi
/chat/completions
ID di chiamata correlati
google/gemini-3.1-pro-preview, ~google/gemini-pro-latest, gemini-3.1-pro-preview, gemini-3.1-pro-preview
Ailoot Ultra · Anthropic Messages POST /v1/messages google/gemini-3.1-pro-preview
google/gemini-3.1-pro-previewgemini-3.1-pro-previewgoogle/gemini-3.1-pro-preview
Introduzione
Gemini 3.1 Pro Preview è il modello di ragionamento multimodale di Google per compiti complessi di software, algoritmi e conoscenza. Accetta testo, immagini, audio, video e PDF e restituisce testo o codice, con strumenti e uscite strutturate. I livelli di ragionamento low, medium e high orientano l’impegno; high è il valore predefinito documentato.
- Input accettati
- Testo
- Risultati
- json · sse
Disponibile in Ailoot · input e metodi
Ailoot Ultra · Anthropic Messages POST /v1/messages
- Tipi di input
text- Tipi di output
json,sse- Formato di output
- JSON o SSE
| Campo | Tipo | Requisito | Valori e limiti | Predefinito |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObbligatorio | Valori e limiti google/gemini-3.1-pro-preview | Predefinito— |
Campomessages | Tipomessage[] | RequisitoObbligatorio | Valori e limiti | Predefinito— |
Campomessages[].role | Tipostring | RequisitoObbligatorio | Valori e limiti user, assistant | Predefinito— |
Campomessages[].content | Tipostring | RequisitoObbligatorio | Valori e limiti | Predefinito— |
Campomax_tokens | Tipointeger | RequisitoObbligatorio | Valori e limiti | Predefinito— |
Campostream | Tipoboolean | RequisitoFacoltativo | Valori e limiti | Predefinitofalse |
Combinazioni di materiali in input
Testo · Testo UTF-8
Stringa messages[].content
Parametri e ciclo di vita del metodo
| Parametro | Contratto |
|---|---|
Parametrocontent_type | Contrattoapplication/json |
Parametrorequired | Contrattomodel, messages, max_tokens |
Parametrooptional_controls | Contrattostream |
Parametromaterial_types | Contrattotext |
Parametrotext_file_material | ContrattoLeggi il documento UTF-8 effettivo e inserisci il testo nell’ingresso indicato o nella stringa del contenuto del messaggio. |
Ciclo di vita: synchronous_or_streamed
Tariffe
Le tariffe non aggiungono opzioni alla richiesta. I parametri supportati sono elencati nel metodo selezionato.
- Modalità rapida
- Tariffa standard Quando è selezionata la modalità rapida
- Modalità flex
- Tariffa standard Quando è selezionata la modalità flex
- Sforzo massimo di ragionamento
- Tariffa standard Quando lo sforzo massimo di ragionamento usa l'adeguamento predefinito (default)
- Sforzo di ragionamento · elevato
- Tariffa standard Quando lo sforzo di ragionamento è elevato
- Sforzo di ragionamento · basso
- Tariffa standard Quando lo sforzo di ragionamento è basso
- Sforzo di ragionamento · medio
- Tariffa standard Quando lo sforzo di ragionamento è medio
- Tariffe della cache esplicita
- Non abilitato Quando viene richiesta una cache esplicita
- Output di ragionamento
- Al ragionamento si applica la tariffa elencata per il sottoinsieme all'interno dell'output aggregato; non conteggiare quei token due volte. Quando l'output include token di ragionamento
Tariffe Ailoot
Prezzi per configurazione
Associa ogni costo alle condizioni indicate. Usa una sola tariffa per ogni insieme di configurazioni alternative.
| Configurazione | Listino delle tariffe | Token di contesto, più di | Token di contesto, fino al limite incluso | Costo |
|---|---|---|---|---|
| ConfigurazioneTariffe di base dei token | Listino delle tariffeTariffa base | Token di contesto, più di— | Token di contesto, fino al limite inclusoNessun limite superiore | Costo Input · Token in input $0.004 / 1K token Output · Token in output $0.024 / 1K token Input · Lettura dalla cache $0.0004 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token Output · Token di ragionamento in uscita $0.024 / 1K token |
| ConfigurazioneFascia 1 di lunghezza della richiesta | Listino delle tariffe— | Token di contesto, più di0 | Token di contesto, fino al limite incluso200.000 | Costo Input · Token in input $0.004 / 1K token Output · Token in output $0.024 / 1K token Input · Lettura dalla cache $0.0004 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token |
| ConfigurazioneFascia 2 di lunghezza della richiesta | Listino delle tariffe— | Token di contesto, più di200.000 | Token di contesto, fino al limite inclusoNessun limite superiore | Costo Input · Token in input $0.008 / 1K token Output · Token in output $0.036 / 1K token Input · Lettura dalla cache $0.0008 / 1K token Input · Scrittura nella cache $0.00075 / 1K token Input · Scrittura nella cache, 1 ora — / 1K token |
Ailoot prenota un importo stimato prima di una richiesta. Dopo il risultato, addebita il costo finale in base all’utilizzo misurato. Per lo streaming, l’addebito usa il record finale di utilizzo. Come funzionano la prenotazione e l’addebito finale →
Esempi di richieste
Ailoot Ultra · Anthropic Messages
{
"model": "google/gemini-3.1-pro-preview",
"max_tokens": 128,
"messages": [
{
"role": "user",
"content": "Summarize the incident report."
}
],
"stream": false
}set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'google/gemini-3.1-pro-preview', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
-H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'google/gemini-3.1-pro-preview', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError
api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
with urlopen(request, timeout=120) as response:
raw = response.read()
Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
Path('result.json').write_bytes(error.read())
Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
Ricevi e salva i risultati
Ailoot Ultra · Anthropic Messages
JSON o SSE
Conserva tutti i risultati completati
Conserva ogni risposta, file e parte di contenuto restituiti per intero.
Conserva tutti i blocchi di contenuto, le firme di ragionamento e gli ID effettivi di utilizzo degli strumenti. Assembla tutti i delta dei blocchi SSE; il primo blocco di testo non è l’uscita completa.
Se occorre verificare la risposta originale
Conserva gli ID e le intestazioni di richiesta/risposta. Non viene fornito alcun URL generico per recuperare un’attività testuale.
Campi della risposta
| Campo | Tipo |
|---|---|
Campoid | Tipostring |
Campomodel | Tipostring |
Campocontent[] | Tipotext|thinking|tool_use|other content block |
Campostop_reason | Tipostring|null |
Campousage | Tipoobject |
Errori e passaggi successivi
| Risposta | Condizione | Passaggio successivo |
|---|---|---|
Risposta400 · invalid_request_error | CondizioneCampi obbligatori, rappresentazione del materiale o valore del parametro non validi | Passaggio successivoCorreggi i campi indicati prima di una nuova richiesta di creazione. |
Alias
Alias del modello
Ailoot gemini-3.1-pro-preview
Ailoot Ultra gemini-3.1-pro-preview, google/gemini-3.1-pro-preview~google/gemini-pro-latest
Alias dei percorsi dei metodi
/chat/completions
ID di chiamata correlati
google/gemini-3.1-pro-preview, ~google/gemini-pro-latest, gemini-3.1-pro-preview, gemini-3.1-pro-preview
FAQ · Google: Gemini 3.1 Pro Preview
- Quali input e risultati sono disponibili?
POST /v1/messages·gemini-3.1-pro-preview:text,image→textPOST /v1beta/models/{model}:generateContent·gemini-3.1-pro-preview:text,image→textPOST /v1/chat/completions·gemini-3.1-pro-preview:text→textPOST /v1/messages·gemini-3.1-pro-preview:text→json,ssePOST /v1/chat/completions·google/gemini-3.1-pro-preview:text→textPOST /v1/messages·google/gemini-3.1-pro-preview:text→json,sse- Quali campi usa la richiesta?
POST /v1/messages·gemini-3.1-pro-preview:model,messages,system,max_tokens,stream,metadataPOST /v1beta/models/{model}:generateContent·gemini-3.1-pro-preview:contents,systemInstruction,sessionIdPOST /v1/chat/completions·gemini-3.1-pro-preview:model,messages,streamPOST /v1/messages·gemini-3.1-pro-preview:model,messages,max_tokens,streamPOST /v1/chat/completions·google/gemini-3.1-pro-preview:model,messages,stream,modalities,providerPOST /v1/messages·google/gemini-3.1-pro-preview:model,messages,max_tokens,stream- Quali limiti si applicano?
POST /v1/messages·gemini-3.1-pro-preview:ctx:1048576;max_out:65536;messages.min_items:1;max_tokens.minimum:1POST /v1beta/models/{model}:generateContent·gemini-3.1-pro-preview:ctx:1048576;max_out:65536;contents.min_items:1POST /v1/chat/completions·gemini-3.1-pro-preview:messages.min_items:1POST /v1/chat/completions·google/gemini-3.1-pro-preview:messages.min_items:1