Gemini 3.8 Flash High
نموذج متعدد الوسائط من Google لهندسة البرمجيات المطوّلة والوكلاء المستقلين والعمل المعقد بالمعرفة.
- Ailoot · رسائل Anthropic
POST /v1/messagesgemini-3.8-flash-high - Ailoot · Gemini generateContent
POST /v1beta/models/{model}:generateContentgemini-3.8-flash-high
عن النموذج
يغطي هذا الوصف قدرات النموذج. وترد أدناه المدخلات والمخرجات والخيارات المتاحة في Ailoot للطريقة المحددة.
صُمم Gemini 3.8 Flash لمهام هندسة البرمجيات الطويلة والعمليات الوكيلية والعمل المعقد بالمعرفة. تصفه Google كتطوير لـGemini 3.7 Flash يركز على العمليات التي لا تنتهي بإجابة واحدة: يعود النموذج إلى المواد ويستخدم الأدوات ويتابع تسلسل الخطوات.
المواد التي يمكن تحليلها
تحدد Google إدخال النص والصور والفيديو والصوت وPDF. في كتالوج Ailoot API الحالي يُعلن للطرق النصية عن النص والصور في الإدخال والنص في الإخراج. لا يشمل هذا الإدخال الفيديو أو الصوت أو PDF. حد الإدخال 1 048 576 توكنًا والإخراج 65 536 توكنًا. يُكوّن نتيجة نصية تشمل الكود والبيانات المنظمة. لا ينتمي إنشاء الصور والصوت إلى إمكانات هذا الإصدار المحدد.
الاستدلال والأدوات
تُدعم مستويات Thinking low وmedium وhigh. في وضع النموذج الأساسي الذي تصفه Google يكون المستوى القياسي medium. تصف هذه القيم نموذج Google الأساسي؛ ويتحدد الوضع وتوفر التحكم عبر Ailoot API وفق الطريقة وإصدار النموذج المختارين. لا يُدعم minimal ويسبب خطأ. يساعد الجهد القابل للضبط على اختيار وضع يناسب تعقيد المرحلة، لكن قد يستخدم النموذج عند جهد عالٍ توكنات أكثر لتنفيذ المهمة.
تشمل الإمكانات استدعاء الدوال وتنفيذ الكود والإجابات المنظمة والتخزين المؤقت للسياق. تتوفر عمليات البحث في الملفات والإسناد إلى نتائج البحث وGoogle Maps وقراءة محتوى عناوين الويب. تُدعم المعالجة على دفعات. للتحكم بواجهة الحاسوب حالة أولية؛ ولا يعني توفره أن كل طريقة لاستدعاء النموذج تتيح تحكمًا كاملاً بالحاسوب.
الغرض والحدود
يبرز المصنّع هندسة البرمجيات ومهام الوكلاء والعمليات المعقدة للعمل بالمعلومات. يتيح السياق الطويل إرسال مواد كبيرة، وتتيح الأدوات تنظيم مراحل مترابطة. تصف هذه الخصائص قدرات النموذج؛ وتتحدد الخيارات والبيانات المدخلة وفق طريقة الاستدعاء المدعومة.
نُشر الإصدار كمستقر في سبتمبر 2026. حد المعرفة المعلن مارس 2026، لكن قد تبقى المعلومات في بعض المجالات عند مستوى يناير 2025. قد تظهر حقائق مختلقة وتأخر وانتهاء مهلة. لا يستبعد الاستدلال الأكبر الأخطاء، ولا يعد الجهد المنخفض بزمن معين للإجابة.
مهمة عملية
مهمة عملية
مثال تقني باللغة الإنجليزية
Plan a safe field-renaming migration
A service stores customer.full_name; old clients send full_name and new clients send display_name. Plan a gradual migration that keeps old clients working while storage changes. Provide stages, rollback conditions and integration tests for mixed clients. Assume no migration tools or live database access; return the design and test scenarios only.النتيجة المتوقعة
A staged migration design with compatibility rules, rollback conditions and mixed-version test cases.التحقق من النتيجة
Each stage specifies which field is read and written, including behavior when both fields are supplied.Ailoot · رسائل Anthropic POST /v1/messages gemini-3.8-flash-high
gemini-3.8-flash-highالبداية
نموذج متعدد الوسائط من Google لهندسة البرمجيات المطوّلة والوكلاء المستقلين والعمل المعقد بالمعرفة.
- المدخلات المقبولة
- النص · الصور
- النتائج
- النص
متاح في Ailoot · المدخلات والطرائق
Ailoot · رسائل Anthropic POST /v1/messages
- الإدخال
text,image- الإخراج
text- السياق
- 1,048,576 tokens
- الحد الأقصى للإخراج
- 65,536 tokens
- صيغة الإخراج
- json أو SSE
| الحقل | النوع | المتطلب | القيم والحدود | القيمة الافتراضية |
|---|---|---|---|---|
الحقلmodel | النوعstring | المتطلبمطلوب | القيم والحدود gemini-3.8-flash-high | القيمة الافتراضية— |
الحقل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.00075 US$ / 1K
- الإخراج
- 0.00375 US$ / 1K
- قراءة ذاكرة التخزين المؤقت
- 0.000075 US$ / 1K
تحجز Ailoot مبلغًا تقديريًا قبل الطلب. وبعد ظهور النتيجة، تُسوّي الرسوم النهائية بناءً على الاستخدام المقاس. وتستخدم تسوية البث سجل الاستخدام النهائي. كيفية عمل حجز المبلغ وتسوية الرسوم →
أمثلة للطلبات
Ailoot · رسائل Anthropic
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.8-flash-high", "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.8-flash-high", "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.8-flash-high",
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.8-flash-high",
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.8-flash-high',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
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.8-flash-high
الأسماء البديلة لمسارات الطرائق
استخدم مسارات الطرائق المعروضة أعلاه.
معرّفات النماذج ذات الصلة IDs
Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent gemini-3.8-flash-high
gemini-3.8-flash-highالبداية
نموذج متعدد الوسائط من Google لهندسة البرمجيات المطوّلة والوكلاء المستقلين والعمل المعقد بالمعرفة.
- المدخلات المقبولة
- النص · الصور
- النتائج
- النص
متاح في Ailoot · المدخلات والطرائق
Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent
- الإدخال
text,image- الإخراج
text- صيغة الإخراج
- json أو بث مدعوم
| الحقل | النوع | المتطلب | القيم والحدود | القيمة الافتراضية |
|---|---|---|---|---|
الحقلpath.model | النوعstring | المتطلبمطلوب | القيم والحدود gemini-3.8-flash-high | القيمة الافتراضية— |
الحقل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.00075 US$ / 1K
- الإخراج
- 0.00375 US$ / 1K
- قراءة ذاكرة التخزين المؤقت
- 0.000075 US$ / 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.8-flash-high: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.8-flash-high: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.8-flash-high", 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.8-flash-high", 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.8-flash-high',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.8-flash-high
الأسماء البديلة لمسارات الطرائق
استخدم مسارات الطرائق المعروضة أعلاه.
معرّفات النماذج ذات الصلة IDs
FAQ · Gemini 3.8 Flash High
- ما المدخلات والنتائج المتاحة؟
POST /v1/messages·gemini-3.8-flash-high:text,image→textPOST /v1beta/models/{model}:generateContent·gemini-3.8-flash-high:text,image→text- ما الحقول التي يستخدمها الطلب؟
POST /v1/messages·gemini-3.8-flash-high:model,messages,system,max_tokens,stream,metadataPOST /v1beta/models/{model}:generateContent·gemini-3.8-flash-high:contents,systemInstruction,sessionId- ما الحدود المطبقة؟
POST /v1/messages·gemini-3.8-flash-high:ctx:1048576;max_out:65536;messages.min_items:1;max_tokens.minimum:1POST /v1beta/models/{model}:generateContent·gemini-3.8-flash-high:contents.min_items:1