מודלים

Gemini Pro Agent

Markdown · JSON

Gemini Pro Agent

מודל רב־מודלי של Google למשימות תכנות מורכבות, לניתוח חומרים גדולים ולעבודה מדויקת מרובת שלבים עם כלים.

על המודל

התיאור הזה מציג את יכולות המודל. הקלט, הפלט והאפשרויות הזמינים ב-Ailoot מפורטים בהמשך לפי השיטה שנבחרה.

Gemini 3.1 Pro Preview מיועד לעבודה עם חומר מורכב ולמשימות שדורשות כמה החלטות רציפות. Google מדגישה הנדסת תוכנה, שימוש בכלים ועקביות של תשובות עובדתיות. המודל מסייע לנתח אוספי נתונים גדולים, מאגרי תוכנה שלמים ומשימות שבהן טקסט משולב עם חומרים חזותיים או קוליים.

אילו חומרים המודל מבין

במאפייני Google מופיעים טקסט, תמונות, וידאו, אודיו ו־PDF. בקטלוג הנוכחי של Ailoot API, לשיטות הטקסטואליות מוצהרים טקסט ותמונות כקלט וטקסט כפלט. וידאו, אודיו ו־PDF אינם כלולים בקבוצת קלט זו. ההקשר הארוך מכיל עד 1 048 576 טוקנים בקלט, והתשובה הטקסטואלית עד 65 536 טוקנים בפלט. הבנת תמונות ואודיו אינה מעידה על יצירתם: הפלט של גרסה זו נשאר טקסטואלי.

הסקה ועבודה בשלבים

Thinking מאפשר להקצות מאמץ נוסף להסקה פנימית. במצב מודל הבסיס שמתארת Google הרמה הרגילה היא high; זמינות low, medium, high. הערכים האלה מתארים את מודל הבסיס של Google; המצב וזמינות השליטה דרך Ailoot API נקבעים לפי השיטה וגרסת המודל שנבחרו. התרחישים המרכזיים כוללים תכנות מורכב, פיתוח אלגוריתמים, תכנון אסטרטגי ושיפור הפתרון בשלבים. זה מועיל במיוחד כשצריך להביא בחשבון כמה דרישות קשורות ולחזור לתוצאות ביניים.

יכולות המודל כוללות קריאות לפונקציות, ביצוע קוד ותשובות מובנות. נתמכים שמירה במטמון של ההקשר, ביסוס באמצעות חיפוש, Google Maps ושימוש בתוכן של כתובות אינטרנט; זמין עיבוד באצוות. קבוצה כזו מאפשרת לבנות תהליך שבו המודל מנתח נתונים, בוחר את הכלי הבא ומפיק את התוצאה. הזמינות בפועל של כל כלי תלויה בשיטת העבודה עם המודל.

הגרסה ומאפייניה

הכרטיס מתייחס לגרסת התצוגה המקדימה gemini-3.1-pro-preview. היא מבוססת על Gemini 3 Pro. היצרן מציין בנפרד את הגרסה gemini-3.1-pro-preview-customtools, שמיועדת לתהליכים עם מעטפת פקודות וכלים שהמשתמש מגדיר. סדרי העדיפויות שלה בבחירת כלים ומאפייני ההתנהגות שלה אינם מאפיינים של גרסת Preview הרגילה.

במודל נשמרות המגבלות הכלליות של קו הבסיס: תשובות עשויות להכיל מידע בדוי, ובקשות מסוימות עשויות להתבצע באיטיות או להסתיים בחריגה מזמן ההמתנה. הסקה מרובת שלבים, הקשר גדול וגישה לנתונים מסייעים לעבוד על משימה מורכבת, אך אינם הופכים כל מסקנה שנוצרה לעובדה שנבדקה.

משימה מעשית

משימה מעשית

דוגמה טכנית באנגלית

Design a dependency-aware work order

Plan execution for these tasks: A has no dependency; B depends on A; C depends on A; D depends on both B and C. At most two tasks may run together, and each takes one hour. Give the earliest valid schedule, a general scheduling algorithm and a test that catches starting D before C finishes.

התוצאה הצפויה

A time-slot schedule, algorithm pseudocode and a dependency-violation test case.

בדיקת התוצאה

Check that the proposed schedule respects both dependencies and the two-task concurrency limit.
Ailoot · Anthropic Messages POST /v1/messages gemini-pro-agent

gemini-pro-agent

Google /gemini-pro-agent

התחלה

מודל רב־מודלי של Google למשימות תכנות מורכבות, לניתוח חומרים גדולים ולעבודה מדויקת מרובת שלבים עם כלים.

סוגי קלט נתמכים
טקסט · תמונות
תוצאות
טקסט

זמין ב-Ailoot · קלט ושיטות

Ailoot · Anthropic Messages POST /v1/messages
סוגי קלט
text, image
סוגי פלט
text
הקשר
⁦1,048,576⁩ tokens
פלט מרבי
⁦65,536⁩ tokens
פורמט פלט
json או SSE
שדהסוגדרישהערכים ומגבלותברירת מחדל
שדהmodelסוגstringדרישהחובהערכים ומגבלות
gemini-pro-agent
ברירת מחדל—
שדה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

Ailoot Anthropic MessagesPOST /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

דוגמת טקסטקלט, תמונהPython SDKNode.js SDKהזרמה ב-Python
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-pro-agent", "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-pro-agent", "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-pro-agent",
    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-pro-agent",
  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-pro-agent',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-pro-agent

כינויים לנתיבי שיטות

השתמשו בנתיבי השיטות המוצגים למעלה.

מזהי מודלים קשורים IDs

gemini-pro-agent

Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent gemini-pro-agent

gemini-pro-agent

Google /gemini-pro-agent

התחלה

מודל רב־מודלי של Google למשימות תכנות מורכבות, לניתוח חומרים גדולים ולעבודה מדויקת מרובת שלבים עם כלים.

סוגי קלט נתמכים
טקסט · תמונות
תוצאות
טקסט

זמין ב-Ailoot · קלט ושיטות

Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent
סוגי קלט
text, image
סוגי פלט
text
הקשר
⁦1,048,576⁩ tokens
פלט מרבי
⁦65,536⁩ tokens
פורמט פלט
json או סטרימינג נתמך
שדהסוגדרישהערכים ומגבלותברירת מחדל
שדהpath.modelסוגstringדרישהחובהערכים ומגבלות
gemini-pro-agent
ברירת מחדל—
שדה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

Ailoot Gemini generateContentPOST /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

דוגמת טקסטקלט, תמונהPython SDKNode.js SDKהזרמה ב-Python
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-pro-agent: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-pro-agent: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-pro-agent", 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-pro-agent", 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-pro-agent',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-pro-agent

כינויים לנתיבי שיטות

השתמשו בנתיבי השיטות המוצגים למעלה.

מזהי מודלים קשורים IDs

gemini-pro-agent

FAQ · Gemini Pro Agent
אילו קלטים ותוצאות זמינים?

POST /v1/messages · gemini-pro-agent: text, image → text

POST /v1beta/models/{model}:generateContent · gemini-pro-agent: text, image → text

באילו שדות הבקשה משתמשת?

POST /v1/messages · gemini-pro-agent: model, messages, system, max_tokens, stream, metadata

POST /v1beta/models/{model}:generateContent · gemini-pro-agent: contents, systemInstruction, sessionId

אילו מגבלות חלות?

POST /v1/messages · gemini-pro-agent: ctx: 1048576; max_out: 65536; messages.min_items: 1; max_tokens.minimum: 1

POST /v1beta/models/{model}:generateContent · gemini-pro-agent: ctx: 1048576; max_out: 65536; contents.min_items: 1

פרטים נוספים

חברו Ailoot ל- Claude Code, OpenCode, Hermes או ליישום שלכם.

החברה ופורטפוליו הפרויקטים שלה

החברה ופורטפוליו הפרויקטים שלה: מיליוני לקוחות; מכירות בהיקף של מיליארדים מדי חודש.

קנו אסימונים בהנחה.

הנחת מנוי לעבודה קבועה. קודי הנחה עד 50% על רכישת אסימונים.

מנוי
בחרו מסלול עם הנחה לבקשות הקבועות שלכם.
קוד הנחה עד 50%
הזינו קוד ברכישה. המחיר יחושב מחדש לפי המבצע הפעיל.
הוצאות בהיסטוריה
המודל, האסימונים והסכום נשמרים לכל בקשה.

בחירת מנוי · מחירי מודלים

חברו API למוצר שאתם מוכרים.

SaaS, יישומים ובוטים לפי ההצעה והסכם הרישוי של Ailoot. למכירה מחדש בקשו רישיון משווק.

יישום מסחרי
שלבו יצירת טקסט, תמונות, וידאו ושמע בתכונות בתשלום של השירות שלכם.
רישיון למכירה מחדש
שלחו תיאור פרויקט ואופן מתן גישה. בקשו תנאי שימוש ומכירה מחדש בכתב.
מסמכים באתר
ההצעה, הסכם הרישוי ומדיניות עיבוד הנתונים זמינים לפני החיבור.

בקשת רישיון למכירה מחדש · ההצעה והסכם הרישוי