Gemini 3.1 Pro Low
שיחת טקסט ותמונות עם הקשר של 1,048,576 טוקנים ותקרת פלט של 65,536 טוקנים.
- Ailoot · Anthropic Messages
POST /v1/messagesgemini-3.1-pro-low - Ailoot · Gemini generateContent
POST /v1beta/models/{model}:generateContentgemini-3.1-pro-low
על המודל
התיאור הזה מציג את יכולות המודל. הקלט, הפלט והאפשרויות הזמינים ב-Ailoot מפורטים בהמשך לפי השיטה שנבחרה.
gemini-3.1-pro-low מקבל טקסט ותמונות ומחזיר טקסט, עם הקשר רשום של 1,048,576 טוקנים ותקרת פלט של 65,536 טוקנים. משימת מסמך חזותי שימושית היא השוואת תרשים שסופק לטקסט שמסביר אותו והפקת פירוט מובנה של המקומות שבהם הנתונים תומכים בתיאור או סותרים אותו.
בחרו במבנה Messages או במבנה Gemini generateContent והשתמשו בייצוג התמונה של אותו ממשק. Messages מחייב max_tokens; Gemini משתמש ב-contents וב-parts. Low מזהה את הפרופיל שנבחר, אך הרשומה המאושרת אינה מגדירה enum של מאמץ או תקציב חשיבה מספרי המקושר לתווית. הקשר ופלט הם מגבלות נפרדות: החלון הגדול יותר אינו מאפשר תשובה בת מיליון טוקנים.
משימה מעשית
משימה מעשית
דוגמה טכנית באנגלית
Review a proposal against criteria
Review this office proposal against the stated criteria. Criteria: capacity at least 12 people, step-free access and monthly rent no more than 2,000 units. Proposal: 14 desks, rent 1,900 units, entrance reached by six stairs; lift information is absent. Return a criterion table and the single clarification that matters before acceptance.התוצאה הצפויה
A criterion-by-criterion assessment with evidence and a question about step-free access.בדיקת התוצאה
Check that absent lift information is recorded as unresolved rather than assumed accessible.Ailoot · Anthropic Messages POST /v1/messages gemini-3.1-pro-low
gemini-3.1-pro-lowהתחלה
שיחת טקסט ותמונות עם הקשר של 1,048,576 טוקנים ותקרת פלט של 65,536 טוקנים.
- סוגי קלט נתמכים
- טקסט · תמונות
- תוצאות
- טקסט
זמין ב-Ailoot · קלט ושיטות
Ailoot · Anthropic Messages POST /v1/messages
- סוגי קלט
text,image- סוגי פלט
text- הקשר
- 1,048,576 tokens
- פלט מרבי
- 65,536 tokens
- פורמט פלט
- json או SSE
| שדה | סוג | דרישה | ערכים ומגבלות | ברירת מחדל |
|---|---|---|---|---|
שדהmodel | סוגstring | דרישהחובה | ערכים ומגבלות gemini-3.1-pro-low | ברירת מחדל— |
שדהmessages | סוגmessage[] | דרישהחובה | ערכים ומגבלות מספר פריטים מזערי: 1 | ברירת מחדל— |
שדהmessages[].role | סוגstring | דרישהחובה | ערכים ומגבלות user, assistant | ברירת מחדל— |
שדהmessages[].content | סוגstring|content_block[] | דרישהחובה | ערכים ומגבלות | ברירת מחדל— |
שדהsystem | סוגstring|content_block[] | דרישהרשות | ערכים ומגבלות | ברירת מחדל— |
שדהmax_tokens | סוגinteger | דרישהחובה | ערכים ומגבלות מינימום: 1 המגבלה חלה על: התקרה המדויקת של המודל/הכרטיס שנבחר | ברירת מחדל— |
שדהstream | סוגboolean | דרישהרשות | ערכים ומגבלות | ברירת מחדלfalse |
שדהtemperature | סוגnumber | דרישהרשות | ערכים ומגבלות תלוי במודל | ברירת מחדל— |
שדהtop_p | סוגnumber | דרישהרשות | ערכים ומגבלות תלוי במודל | ברירת מחדל— |
שדהstop_sequences | סוגstring[] | דרישהרשות | ערכים ומגבלות תלוי במודל | ברירת מחדל— |
שדהtools | סוגtool[] | דרישהרשות | ערכים ומגבלות תלוי במודל | ברירת מחדל— |
שדהtools[].name | סוגstring | דרישהרשות | ערכים ומגבלות חל כאשר: סופק כלי | ברירת מחדל— |
שדהtools[].description | סוגstring | דרישהרשות | ערכים ומגבלות | ברירת מחדל— |
שדהtools[].input_schema | סוגJSON_schema | דרישהרשות | ערכים ומגבלות | ברירת מחדל— |
שדהtool_choice | סוגobject | דרישהרשות | ערכים ומגבלות תלוי במודל | ברירת מחדל— |
שדהthinking.type | סוגstring | דרישהרשות | ערכים ומגבלות תלוי במודל | ברירת מחדל— |
שדהthinking.budget_tokens | סוגinteger | דרישהרשות | ערכים ומגבלות תלוי במודל | ברירת מחדל— |
שדהoutput_config.effort | סוגstring | דרישהרשות | ערכים ומגבלות תלוי במודל | ברירת מחדל— |
שדהmetadata | סוגobject | דרישהרשות | ערכים ומגבלות | ברירת מחדל— |
שדהcache_control | סוגobject | דרישהרשות | ערכים ומגבלות תלוי במודל | ברירת מחדל— |
שילובים של חומרי קלט
טקסט · טקסט UTF8
messages[].content או בלוק type=text
טקסט + תמונה
{type:image,source:{type:base64,media_type,data}} או מקור מסוג type=url
פרמטרים ומחזור חיים של השיטה
| פרמטר | מפרט |
|---|---|
פרמטרmaterial_types | מפרטtext, image |
פרמטרrequired | מפרטmodel, messages, max_tokens |
פרמטרoptional_controls | מפרטnull |
פרמטרcontent_type | מפרטapplication/json |
פרמטרtext_file_material | מפרטתוכן UTF-8 בפועל מוכנס כטקסט; מזהי קבצים/URLs דורשים תמיכה נפרדת ומדויקת |
מחזור חיים: exact retained published method
מבני המתודות והמזהים מדויקים; יכולת הספק נפרדת מקבלת הבקשה לביצוע.
תעריפים
תעריפי שיטות Ailoot
POST /v1/messages- קלט
- 0.002 $ / 1K
- פלט
- 0.012 $ / 1K
- קריאה מהמטמון
- 0.0002 $ / 1K
מחירים לפי אורך הבקשה · Anthropic Messages
| גודל הבקשה, בטוקנים | קלט | פלט | קריאה מהמטמון | כתיבה למטמון | מטמון: 5 דקות | מטמון: 1 שעה |
|---|---|---|---|---|---|---|
| גודל הבקשה, בטוקנים(0; 200,000] | קלט0.002 $ | פלט0.012 $ | קריאה מהמטמון0.0002 $ | כתיבה למטמוןתעריף בסיס: — | מטמון: 5 דקותתעריף בסיס: — | מטמון: 1 שעהתעריף בסיס: — |
| גודל הבקשה, בטוקנים(200,000; ∞) | קלט0.004 $ | פלט0.018 $ | קריאה מהמטמון0.0004 $ | כתיבה למטמוןתעריף בסיס: — | מטמון: 5 דקותתעריף בסיס: — | מטמון: 1 שעהתעריף בסיס: — |
התעריפים ב-USD לכל 1K טוקנים. אם לא הוגדר תעריף, נעשה שימוש בתעריף הבסיס של השיטה; «—» מציין שלא הוגדר תעריף בסיס.
לפני הבקשה Ailoot משריינת סכום משוער. לאחר קבלת התוצאה היא מסדירה את החיוב הסופי לפי השימוש המדוד. הסדרת חיוב בהזרמה משתמשת ברשומת השימוש הסופית. איך פועלים שריון הסכום והסדרת החיוב →
דוגמאות לבקשות
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-low", "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-low", "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-low",
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-low",
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-low',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")
קבלה ושמירה של תוצאות
Ailoot · Anthropic Messages
json או SSE
שמירת כל התוצאות שהושלמו
שמרו כל תגובה מלאה, קובץ ומקטע תוכן שהוחזרו.
שמרו את כל בלוקי התוכן, חתימות החשיבה ומזהי השימוש בכלים בפועל. הרכיבו את כל עדכוני הבלוקים של SSE; בלוק הטקסט הראשון אינו הפלט המלא.
כשצריך לבדוק את התגובה המקורית
שמרו מזהי בקשות/תגובות וכותרות. לא מסופק URL כללי לאחזור משימת טקסט.
שדות התגובה
| שדה | סוג |
|---|---|
שדהid | סוגstring |
שדהmodel | סוגstring |
שדהcontent[] | סוגtext|thinking|tool_use|other content block |
שדהstop_reason | סוגstring|null |
שדהusage | סוגobject |
שגיאות והשלבים הבאים
| תגובה | תנאי | השלב הבא |
|---|---|---|
תגובה400 · invalid_request_error | תנאישדות נדרשים, ייצוג חומר או ערך פרמטר שאינם תקינים | השלב הבאתקנו את השדות שצוינו לפני בקשת יצירה חדשה. |
כינויים
כינויים למודל
Ailoot gemini-3.1-pro-low
כינויים לנתיבי שיטות
השתמשו בנתיבי השיטות המוצגים למעלה.
מזהי מודלים קשורים IDs
Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent gemini-3.1-pro-low
gemini-3.1-pro-lowהתחלה
שיחת טקסט ותמונות עם הקשר של 1,048,576 טוקנים ותקרת פלט של 65,536 טוקנים.
- סוגי קלט נתמכים
- טקסט · תמונות
- תוצאות
- טקסט
זמין ב-Ailoot · קלט ושיטות
Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent
- סוגי קלט
text,image- סוגי פלט
text- הקשר
- 1,048,576 tokens
- פלט מרבי
- 65,536 tokens
- פורמט פלט
- json או סטרימינג נתמך
| שדה | סוג | דרישה | ערכים ומגבלות | ברירת מחדל |
|---|---|---|---|---|
שדהpath.model | סוגstring | דרישהחובה | ערכים ומגבלות gemini-3.1-pro-low | ברירת מחדל— |
שדהcontents | סוגcontent[] | דרישהחובה | ערכים ומגבלות מספר פריטים מזערי: 1 | ברירת מחדל— |
שדהcontents[].role | סוגstring | דרישהרשות | ערכים ומגבלות user, model | ברירת מחדל— |
שדהcontents[].parts | סוגpart[] | דרישהחובה | ערכים ומגבלות | ברירת מחדל— |
שדהsystemInstruction | סוגcontent | דרישהרשות | ערכים ומגבלות | ברירת מחדל— |
שדהgenerationConfig.maxOutputTokens | סוגinteger | דרישהרשות | ערכים ומגבלות מינימום: 1 תלוי במודל | ברירת מחדל— |
שדהgenerationConfig.temperature | סוגnumber | דרישהרשות | ערכים ומגבלות תלוי במודל | ברירת מחדל— |
שדהgenerationConfig.topP | סוגnumber | דרישהרשות | ערכים ומגבלות תלוי במודל | ברירת מחדל— |
שדהgenerationConfig.topK | סוגinteger | דרישהרשות | ערכים ומגבלות תלוי במודל | ברירת מחדל— |
שדהgenerationConfig.stopSequences | סוגstring[] | דרישהרשות | ערכים ומגבלות תלוי במודל | ברירת מחדל— |
שדהgenerationConfig.thinkingConfig.includeThoughts | סוגboolean | דרישהרשות | ערכים ומגבלות תלוי במודל | ברירת מחדל— |
שדהgenerationConfig.thinkingConfig.thinkingBudget | סוגinteger | דרישהרשות | ערכים ומגבלות תלוי במודל | ברירת מחדל— |
שדהtools[].functionDeclarations | סוגfunction_declaration[] | דרישהרשות | ערכים ומגבלות תלוי במודל | ברירת מחדל— |
שדהtoolConfig.functionCallingConfig.mode | סוגstring | דרישהרשות | ערכים ומגבלות תלוי במודל | ברירת מחדל— |
שדהsafetySettings | סוגobject[] | דרישהרשות | ערכים ומגבלות תלוי במודל | ברירת מחדל— |
שדהsessionId | סוגstring | דרישהרשות | ערכים ומגבלות | ברירת מחדל— |
שילובים של חומרי קלט
טקסט · טקסט UTF8
contents[].parts[].text
טקסט + תמונה
parts[].inlineData={mimeType,data}
פרמטרים ומחזור חיים של השיטה
| פרמטר | מפרט |
|---|---|
פרמטרmaterial_types | מפרטtext, image |
פרמטרrequired | מפרטcontents |
פרמטרoptional_controls | מפרטnull |
פרמטרcontent_type | מפרטapplication/json |
פרמטרtext_file_material | מפרטתוכן UTF-8 בפועל מוכנס כטקסט; מזהי קבצים/URLs דורשים תמיכה נפרדת ומדויקת |
מחזור חיים: exact retained published method
מבני המתודות והמזהים מדויקים; יכולת הספק נפרדת מקבלת הבקשה לביצוע.
תעריפים
תעריפי שיטות Ailoot
POST /v1beta/models/{model}:generateContent- קלט
- 0.002 $ / 1K
- פלט
- 0.012 $ / 1K
- קריאה מהמטמון
- 0.0002 $ / 1K
מחירים לפי אורך הבקשה · Gemini generateContent
| גודל הבקשה, בטוקנים | קלט | פלט | קריאה מהמטמון | כתיבה למטמון | מטמון: 5 דקות | מטמון: 1 שעה |
|---|---|---|---|---|---|---|
| גודל הבקשה, בטוקנים(0; 200,000] | קלט0.002 $ | פלט0.012 $ | קריאה מהמטמון0.0002 $ | כתיבה למטמוןתעריף בסיס: — | מטמון: 5 דקותתעריף בסיס: — | מטמון: 1 שעהתעריף בסיס: — |
| גודל הבקשה, בטוקנים(200,000; ∞) | קלט0.004 $ | פלט0.018 $ | קריאה מהמטמון0.0004 $ | כתיבה למטמוןתעריף בסיס: — | מטמון: 5 דקותתעריף בסיס: — | מטמון: 1 שעהתעריף בסיס: — |
התעריפים ב-USD לכל 1K טוקנים. אם לא הוגדר תעריף, נעשה שימוש בתעריף הבסיס של השיטה; «—» מציין שלא הוגדר תעריף בסיס.
לפני הבקשה Ailoot משריינת סכום משוער. לאחר קבלת התוצאה היא מסדירה את החיוב הסופי לפי השימוש המדוד. הסדרת חיוב בהזרמה משתמשת ברשומת השימוש הסופית. איך פועלים שריון הסכום והסדרת החיוב →
דוגמאות לבקשות
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-low: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-low: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-low", 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-low", 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-low',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
קבלה ושמירה של תוצאות
Ailoot · Gemini generateContent
json או סטרימינג נתמך
שמירת כל התוצאות שהושלמו
שמרו כל תגובה מלאה, קובץ ומקטע תוכן שהוחזרו.
שמרו את כל המועמדים והחלקים, כולל קריאות לפונקציות, חתימות חשיבה ושימוש; הרכיבו את מקטעי הסטרימינג לפי הסדר.
כשצריך לבדוק את התגובה המקורית
שמרו מזהי בקשות/תגובות וכותרות. לא מסופק URL כללי לאחזור משימת טקסט.
שדות התגובה
| שדה | סוג |
|---|---|
שדהresponseId | סוגstring |
שדהmodelVersion | סוגstring |
שדהcandidates[].content.parts[] | סוגtext|inlineData|functionCall|other part |
שדהcandidates[].finishReason | סוגstring |
שדהusageMetadata | סוגobject |
שגיאות והשלבים הבאים
| תגובה | תנאי | השלב הבא |
|---|---|---|
תגובה400 · invalid_request_error | תנאישדות נדרשים, ייצוג חומר או ערך פרמטר שאינם תקינים | השלב הבאתקנו את השדות שצוינו לפני בקשת יצירה חדשה. |
כינויים
כינויים למודל
Ailoot gemini-3.1-pro-low
כינויים לנתיבי שיטות
השתמשו בנתיבי השיטות המוצגים למעלה.
מזהי מודלים קשורים IDs
FAQ · Gemini 3.1 Pro Low
- אילו קלטים ותוצאות זמינים?
POST /v1/messages·gemini-3.1-pro-low:text,image→textPOST /v1beta/models/{model}:generateContent·gemini-3.1-pro-low:text,image→text- באילו שדות הבקשה משתמשת?
POST /v1/messages·gemini-3.1-pro-low:model,messages,system,max_tokens,stream,metadataPOST /v1beta/models/{model}:generateContent·gemini-3.1-pro-low:contents,systemInstruction,sessionId- אילו מגבלות חלות?
POST /v1/messages·gemini-3.1-pro-low:ctx:1048576;max_out:65536;messages.min_items:1;max_tokens.minimum:1POST /v1beta/models/{model}:generateContent·gemini-3.1-pro-low:ctx:1048576;max_out:65536;contents.min_items:1