Google: Gemini 3.1 Pro Preview Custom Tools
Gemini 3.1 Pro Preview Custom Tools è una variante distinta orientata agli agenti, che dà priorità agli strumenti definiti dall'applicazione insieme ai comandi del terminale. Usala quando azioni come la lettura dei file o la ricerca nel codice devono guidare un compito in più passaggi, con l'applicazione che esegue e restituisce ogni risultato degli strumenti.
- Ailoot Ultra · OpenAI Chat
POST /v1/chat/completionsgoogle/gemini-3.1-pro-preview-customtools - Ailoot Ultra · Anthropic Messages
POST /v1/messagesgoogle/gemini-3.1-pro-preview-customtools
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 Custom Tools è la variante specializzata di Google per flussi agentici che combinano comandi del terminale e strumenti personalizzati. Il suo comportamento distintivo è dare priorità agli strumenti definiti dall'applicazione; il produttore cita view_file e search_code come esempi. È una variante separata, con un nome proprio, di Gemini 3.1 Pro Preview, anziché un'etichetta diversa per ogni richiesta Pro. Un compito utile si affida allo strumento giusto per ottenere prove prima di preparare il risultato testuale finale.
La linea Pro Preview accetta testo, immagini, video, audio e PDF e restituisce testo. Per questa linea il produttore elenca un limite di input di 1,048,576 token e un limite di output di 65,536 token. Un'indagine su un repository può combinare file sorgente, requisiti scritti e uno screenshot dell'interfaccia; un flusso documentale può combinare pagine e domande. Etichetta le fonti e definisci il risultato finale, affinché l'ampio budget di input supporti un compito specifico anziché un riversamento indiscriminato di archivio.
Per un agente software, definisci l'obiettivo, gli strumenti disponibili e l'ambito della modifica richiesta. Uno strumento di ricerca personalizzato potrebbe restituire le posizioni dei file corrispondenti, mentre uno strumento di lettura dei file fornisce il contenuto esatto pertinente. Specifica gli argomenti accettati e i campi restituiti. L'applicazione esegue una chiamata accettata e passa il risultato al modello, che può scegliere il passaggio successivo in base a ciò che è effettivamente accaduto. Un percorso restituito è prova di un risultato di ricerca, non prova che il file sia stato modificato o che sia stato eseguito un test.
La variante Custom Tools è prevista per i casi in cui queste azioni specializzate devono avere priorità rispetto a un comando bash generico. Per esempio, un agente può prima cercare l'implementazione di un comportamento denominato, leggere i file associati, confrontarli con il requisito dell'utente e poi proporre una modifica delimitata. Definisci quali interfacce e comportamenti debbano rimanere integri e richiedi un elenco finale delle modifiche proposte con le informazioni sorgente usate. Se è disponibile un esecutore di test controllato, restituisci il suo risultato effettivo prima di chiedere una conclusione sulla modifica.
La documentazione 3.1 Pro del produttore comprende thinking, output strutturati e chiamate di funzione, insieme a esecuzione di codice, grounding tramite ricerca, grounding tramite Google Maps, contesto URL e caching. La voce relativa alla ricerca nei file è esplicitamente limitata a Google AI Studio. La disponibilità degli strumenti fa quindi parte dell'interfaccia del produttore e della configurazione applicativa scelte. La preferenza speciale della variante per gli strumenti personalizzati non fornisce di per sé tali strumenti né esegue un'operazione esterna. Mantieni un record del nome della funzione, degli argomenti convalidati e del risultato per ogni azione applicativa completata.
La guida Gemini 3 descrive i livelli di thinking low, medium e high per 3.1 Pro, con high come predefinito. Sono capacità relative di analisi, anziché garanzie rigorose sul numero di token. Scegli il livello in base al compito e fornisci istruzioni dirette, anziché elaborati rituali di prompting. Se è richiesto un output strutturato, definisci campi, tipi e regole per i valori mancanti. Per un rapporto sull'implementazione, il record finale potrebbe identificare i file esaminati, il comportamento richiesto, la modifica proposta e le domande residue. Controlla che ogni voce derivi dai risultati effettivi degli strumenti o delle fonti.
Gli agenti su più turni devono conservare la conversazione e il contesto di ragionamento richiesto. La guida del produttore spiega le thought signatures e distingue la cronologia stateful gestita dalla cronologia stateless gestita manualmente. Usa la gestione documentata nell'interfaccia selezionata, soprattutto nella prosecuzione dopo un risultato di uno strumento. Per materiale sorgente lungo, colloca la domanda specifica dopo il contesto e collega a essa la risposta richiesta. La guida consiglia anche la propria temperature predefinita di 1.0, anziché trasferire un'impostazione a bassa temperatura che potrebbe produrre cicli nei compiti complessi.
Il produttore avverte che la qualità può variare nei casi d'uso che non beneficiano degli strumenti personalizzati. Questo è un confine di selezione significativo: usa questo profilo per un agente centrato sugli strumenti, anziché presumere un miglioramento generale per ogni prompt isolato. L'output testuale può essere un piano, una proposta di codice, una spiegazione o un risultato strutturato; input di immagini o audio non trasformano la variante in un generatore multimediale. Esamina il codice proposto, verifica i calcoli e distingui le operazioni confermate dai suggerimenti. Conserva l'esatta identità del modello Custom Tools insieme al compito, alle definizioni degli strumenti e alle prove restituite, affinché una prosecuzione successiva abbia una base concreta.
Caso pratico
Caso pratico
Esempio tecnico in inglese
Interpret custom-tool evidence
Use this supplied tool transcript. search_code returned settings.py:12 and view_file returned: 'RETRY_LIMIT = 3'. No edit or test result is present. Requirement: increase the retry limit to five. Return the examined file, the exact proposed edit and the remaining check. Distinguish the retrieved value from actions that have not occurred.Risultato atteso
A file-linked proposed edit and an explicitly unexecuted validation step.Verificare il risultato
The answer must not claim that settings.py was changed or a test passed.Ailoot Ultra · OpenAI Chat POST /v1/chat/completions google/gemini-3.1-pro-preview-customtools
google/gemini-3.1-pro-preview-customtools
google/gemini-3.1-pro-preview-customtoolsIntroduzione
Gemini 3.1 Pro Preview Custom Tools è una variante distinta orientata agli agenti, che dà priorità agli strumenti definiti dall'applicazione insieme ai comandi del terminale. Usala quando azioni come la lettura dei file o la ricerca nel codice devono guidare un compito in più passaggi, con l'applicazione che esegue e restituisce ogni risultato degli strumenti.
- 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-customtools | 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-customtools", "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-customtools',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-customtools',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 Ultra google/gemini-3.1-pro-preview-customtools
Alias dei percorsi dei metodi
Usa i percorsi dei metodi indicati sopra.
ID di chiamata correlati
Ailoot Ultra · Anthropic Messages POST /v1/messages google/gemini-3.1-pro-preview-customtools
google/gemini-3.1-pro-preview-customtools
google/gemini-3.1-pro-preview-customtoolsIntroduzione
Gemini 3.1 Pro Preview Custom Tools è una variante distinta orientata agli agenti, che dà priorità agli strumenti definiti dall'applicazione insieme ai comandi del terminale. Usala quando azioni come la lettura dei file o la ricerca nel codice devono guidare un compito in più passaggi, con l'applicazione che esegue e restituisce ogni risultato degli strumenti.
- 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-customtools | 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-customtools",
"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-customtools', '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-customtools', '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 Ultra google/gemini-3.1-pro-preview-customtools
Alias dei percorsi dei metodi
Usa i percorsi dei metodi indicati sopra.
ID di chiamata correlati
FAQ · Google: Gemini 3.1 Pro Preview Custom Tools
- Quali input e risultati sono disponibili?
POST /v1/chat/completions·google/gemini-3.1-pro-preview-customtools:text→textPOST /v1/messages·google/gemini-3.1-pro-preview-customtools:text→json,sse- Quali campi usa la richiesta?
POST /v1/chat/completions·google/gemini-3.1-pro-preview-customtools:model,messages,stream,modalities,providerPOST /v1/messages·google/gemini-3.1-pro-preview-customtools:model,messages,max_tokens,stream- Quali limiti si applicano?
POST /v1/chat/completions·google/gemini-3.1-pro-preview-customtools:messages.min_items:1