hujjatlar
API

Gemini generateContent

Markdown

Google Gemini’ning o‘z formati: Gemini CLI, Google GenAI SDK va REST mijoz dasturlari uchun.

To‘liq qo‘llanma
POSThttps://api.ailoot.ai/v1beta/models/{model}:generateContent
Gemini generateContent
curl "https://api.ailoot.ai/v1beta/models/gemini-3.8-flash:generateContent" \
  -H "x-goog-api-key: $AILOOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {"role": "user", "parts": [{"text": "Qahvaxona uchun uchta nom o‘ylab toping."}]}
    ]
  }' 
200 OK
{
  "candidates": [
    {
      "content": {
        "role": "model",
        "parts": [{ "text": "1. «Don va bug‘» 2. «Tonggi qahva maydalash» 3. «Burchakdagi qahvaxona»" }]
      },
      "finishReason": "STOP"
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 9,
    "candidatesTokenCount": 27,
    "totalTokenCount": 36
  },
  "modelVersion": "gemini-3.8-flash"
}

Avtorizatsiya

  • x-goog-api-keyheadermajburiy

    Kalit sk-…. Quyidagilar ham mos keladi: Authorization: Bearer yoki x-api-key. Google bilan moslik uchun quyidagisi ham qabul qilinadi: ?key= manzilda — eng past ustuvorlik bilan; ?api_key= 400 bilan rad etiladi. Sarlavhani tavsiya qilamiz: shunda kalit loglarga tushmaydi.

Yo‘l

  • modelstringmajburiy

    Gemini formatidagi model ID’si, masalan gemini-3.8-flash yoki gemini-3.1-pro. Jami 27 ta.

POSThttps://api.ailoot.ai/v1beta/models/{model}:streamGenerateContent?alt=sse
GEThttps://api.ailoot.ai/v1beta/models

So‘rov tanasi

  • contentsarraymajburiy

    Quyidagi maydonga ega xabarlar: role (user/model) va parts: text, inlineData/fileData, functionCall/functionResponse. Ilovalar — model kirishda qabul qiladigan turlar.

  • systemInstructionobjectixtiyoriy

    Matnli tizim ko‘rsatmasi: {"parts": [{"text": "…"}]}.

  • generationConfigobjectixtiyoriy

    generationConfig qabul qiladi: temperature, topP, topK, maxOutputTokens, thinkingConfig, responseMimeType (text/plain yoki application/json), responseSchema yoki responseJsonSchema (JSON obyekt), stopSequences (satrlar massivi), candidateCount: 1, butun sonli seed, sonli presencePenalty va frequencyPenalty. Ruxsat etilgan oraliqlar va imkoniyatlar aniq modelga bog‘liq; JSON javob uchun qo‘llab-quvvatlanadigan sxema shakllaridan bittasini va quyidagini tanlang: application/json. Matn modellarida responseModalities — faqat ["TEXT"].

  • safetySettingsarrayixtiyoriy

    Quyidagi majburiy maydonlarga ega obyektlar: category va threshold, ixtiyoriy maydon: method. Qiymatlar aniq model tomonidan qo‘llab-quvvatlanishi kerak.

  • toolsarrayixtiyoriy

    Mijoz tomonidagi functionDeclarations ni ilovangiz bajaradi. Matn modellarida quyidagilar ham qabul qilinadi: {"googleSearch": {}} va {"urlContext": {}}: alohida yoki birga quyidagi massivda: tools. Google Search ham, URL context ham quyidagisi bilan birga ishlatilmaydi: functionDeclarations bitta so‘rovda. Chiqishda rasmlar uchun faqat mijoz funksiyalari mavjud. Boshqa ichki vositalar va explicit cache qo‘llab-quvvatlanmaydi. Search/URL context to‘liq kirish limiti uchun zaxira talab qilishi mumkin; haqiqiy toolUsePromptTokenCount kirish tokenlari sifatida hisobga olinadi.

  • toolConfigobjectixtiyoriy

    functionCallingConfig: mode (AUTO/ANY/NONE/VALIDATED/MODE_UNSPECIFIED), allowedFunctionNames.

Model maydonni, ilovani yoki vositalar birikmasini qo‘llab-quvvatlamasa, so‘rov zaxiradan oldin rad etiladi — hech narsa yechib olinmaydi. HTTP kodi quyidagicha bo‘ladi: 400 quyidagi qiymat bilan: status INVALID_ARGUMENT va quyidagi sinf bilan: invalid_request (quyidagi maydonda: ErrorInfo.reason — INVALID_REQUEST). Noto‘g‘ri JSON, yo‘l parametrlari xatolari va boshqa tekshiruvlar ham quyidagi kodni qaytaradi: 400; xato matni va Request ID’ni o‘qing. Imkoniyatlar modelga bog‘liq: uning formatlari va kirishlarini katalogda tekshiring.

PDF, audio, video va havolalar

Tegishli kirish turini qo‘llab-quvvatlaydigan Gemini modellarida parts[].inlineData quyidagini o‘z ichiga oladi: mimeType va bo‘sh bo‘lmagan base64 ma’lumotlar; PDF haqiqiy PDF bo‘lishi kerak. fileData quyidagilarni o‘z ichiga oladi: ochiq https-manzilni quyidagi maydonda: fileUri va fayl turining MIME qiymatini. YouTube uchun MIME’ni ko‘rsatmaslik mumkin. http, yopiq manzillar, gs:// va Google Files API obyektlari qo‘llab-quvvatlanmaydi; Google Files API orqali yuklash ham qo‘llab-quvvatlanmaydi. Video uchun quyidagini qo‘shish mumkin: videoMetadata: startOffset/endOffset soniyalardagi satr ko‘rinishida (masalan, 1.5s) va fps 0 dan katta va 24 dan katta emas. Tana hajmi, kontekst, ruxsat etilgan kirish va javob limiti model hamda format bo‘yicha tekshiriladi.

KirishQo‘llab-quvvatlanadigan MIME
Inline rasmlarimage/png, image/jpeg, image/webp
Hujjatlarapplication/pdf; text/plain, text/html, text/css, text/csv, text/xml, text/rtf, text/markdown, text/javascript, application/x-javascript, text/x-python, application/x-python
Audioaudio/wav, audio/mp3, audio/mpeg, audio/aiff, audio/aac, audio/ogg, audio/flac
Videovideo/mp4, video/mpeg, video/mov, video/quicktime, video/avi, video/x-flv, video/mpg, video/webm, video/wmv, video/3gpp
import json, os, urllib.request

def generate(model, payload):
    req = urllib.request.Request(
        "https://api.ailoot.ai/v1beta/models/" + model + ":generateContent",
        data=json.dumps(payload).encode(),
        headers={"x-goog-api-key": os.environ["AILOOT_API_KEY"],
                 "Content-Type": "application/json"},
    )
    # Bir marta yuboring. Kutish vaqti tugasa, qayta urinishdan oldin foydalanish tarixidagi Request ID ni tekshiring.
    with urllib.request.urlopen(req, timeout=300) as response:
        print("Request ID:", response.headers.get("X-Request-ID"))
        return json.load(response)

import base64, pathlib, sys

# Haqiqiy mahalliy PDF, audio yoki video faylini va unga mos MIME turini ko‘rsating.
path, mime = pathlib.Path(sys.argv[1]), sys.argv[2]
payload = {"contents": [{"role": "user", "parts": [
    {"text": "Fayl mazmunini qisqacha bayon qiling."},
    {"inlineData": {"mimeType": mime,
                    "data": base64.b64encode(path.read_bytes()).decode()}},
]}]}
print(generate("gemini-3.8-flash", payload))
# Muqobil biriktirma: {"fileData": {"mimeType": mime, "fileUri": public_https_url}}
# Haqiqiy YouTube URL uchun: {"fileData": {"fileUri": youtube_url}}

Search va URL context

Mijoz tomonidagi functionDeclarations ni ilovangiz bajaradi. Matn modellarida quyidagilar ham qabul qilinadi: {"googleSearch": {}} va {"urlContext": {}}: alohida yoki birga quyidagi massivda: tools. Google Search ham, URL context ham quyidagisi bilan birga ishlatilmaydi: functionDeclarations bitta so‘rovda. Chiqishda rasmlar uchun faqat mijoz funksiyalari mavjud. Boshqa ichki vositalar va explicit cache qo‘llab-quvvatlanmaydi. Search/URL context to‘liq kirish limiti uchun zaxira talab qilishi mumkin; haqiqiy toolUsePromptTokenCount kirish tokenlari sifatida hisobga olinadi.

{"tools": [{"googleSearch": {}}, {"urlContext": {}}]}

Chiqishdagi rasmlar

Gemini formatidagi javobda rasmlarni faqat quyidagi model bera oladi: gemini-3.1-flash-image. Bu quyidagi endpointdan alohida imkoniyat: /v1/images/generations: boshqa rasm modellari bu yerda ishlamaydi. Bu modelning kirishi 131072 tokengacha, javobi 32768 tagacha; eng uzun javobning to‘liq narxi oldindan zaxiralanadi.

responseModalities — takrorlanishsiz, bo‘sh bo‘lmagan TEXT/IMAGE to‘plami. imageConfig.imageSize: 1K/2K/4K; aspectRatio: 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9, 1:4, 4:1, 1:8, 8:1. Bu modelning kirishi — matn va inline PNG/JPEG/WebP; PDF/audio/video/fileData hamda ichki Search/URL context bu yerda qabul qilinmaydi. Kalitingiz uchun mavjudlik va narxlar — katalogda va quyidagi so‘rovda: GET /v1/models.

import json, os, urllib.request

def generate(model, payload):
    req = urllib.request.Request(
        "https://api.ailoot.ai/v1beta/models/" + model + ":generateContent",
        data=json.dumps(payload).encode(),
        headers={"x-goog-api-key": os.environ["AILOOT_API_KEY"],
                 "Content-Type": "application/json"},
    )
    # Bir marta yuboring. Kutish vaqti tugasa, qayta urinishdan oldin foydalanish tarixidagi Request ID ni tekshiring.
    with urllib.request.urlopen(req, timeout=300) as response:
        print("Request ID:", response.headers.get("X-Request-ID"))
        return json.load(response)

import base64, pathlib

reply = generate("gemini-3.1-flash-image", {
    "contents": [{"role": "user", "parts": [{"text": "Akvarel: tongdagi mayoq"}]}],
    "generationConfig": {
        "responseModalities": ["TEXT", "IMAGE"],
        "imageConfig": {"aspectRatio": "1:1", "imageSize": "1K"},
    },
})
index = 0
for candidate in reply.get("candidates", []):
    for part in candidate.get("content", {}).get("parts", []):
        if "text" in part:
            print(part["text"])
        blob = part.get("inlineData", {})
        if blob.get("mimeType", "").startswith("image/") and blob.get("data"):
            index += 1
            extension = {"image/png": "png", "image/jpeg": "jpg",
                         "image/webp": "webp"}.get(blob["mimeType"], "bin")
            pathlib.Path(f"gemini-image-v{index}.{extension}").write_bytes(
                base64.b64decode(blob["data"]))
print("All returned images:", index)

Function calling’ning to‘liq sikli

Funksiyalarni mijoz dasturi bajaradi. Modelning butun asl content qiymatini thoughtSignature bilan o‘zgartirmay qaytaring, keyin name va agar functionCall ichida bo‘lgan bo‘lsa, id qiymati bir xil bo‘lgan functionResponse yuboring.

import json, os, urllib.request

def generate(model, payload):
    req = urllib.request.Request(
        "https://api.ailoot.ai/v1beta/models/" + model + ":generateContent",
        data=json.dumps(payload).encode(),
        headers={"x-goog-api-key": os.environ["AILOOT_API_KEY"],
                 "Content-Type": "application/json"},
    )
    # Bir marta yuboring. Kutish vaqti tugasa, qayta urinishdan oldin foydalanish tarixidagi Request ID ni tekshiring.
    with urllib.request.urlopen(req, timeout=300) as response:
        print("Request ID:", response.headers.get("X-Request-ID"))
        return json.load(response)

tools = [{"functionDeclarations": [{
    "name": "multiply", "description": "Ikki sonni ko‘paytirish",
    "parameters": {"type": "object", "properties": {
        "a": {"type": "number"}, "b": {"type": "number"}},
        "required": ["a", "b"]},
}]}]
contents = [{"role": "user", "parts": [{"text": "Funksiya yordamida 7 ni 8 ga ko‘paytiring"}]}]
for turn in range(4):  # Vosita siklini cheklang; natijasi noaniq so‘rovni qayta yubormang.
    reply = generate("gemini-3.8-flash", {"contents": contents, "tools": tools})
    content = reply["candidates"][0]["content"]
    contents.append(content)  # BARCHA asl parts va thoughtSignature qiymatlarini o‘zgartirmasdan saqlang.
    results = []
    for part in content.get("parts", []):
        call = part.get("functionCall")
        if not call:
            continue
        if call["name"] != "multiply":
            raise ValueError("Unexpected function")
        args = call["args"]
        result = {"name": call["name"], "response": {"value": args["a"] * args["b"]}}
        if "id" in call:
            result["id"] = call["id"]
        results.append({"functionResponse": result})
    if not results:
        print(content)
        break
    contents.append({"role": "user", "parts": results})
else:
    raise RuntimeError("Tool loop limit reached")

Javob

  • candidates[].content.partsarray

    Model javobi.

  • usageMetadataobject

    promptTokenCount, candidatesTokenCount, totalTokenCount.

Savollaringiz qoldimi? Request ID va tavsifni yuboring — tushunishga yordam beramiz.Yordam xizmatiga yozish