> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tokenlab.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# إنشاء المحتوى

> إنشاء المحتوى باستخدام تنسيق Google Gemini API

يدعم TokenLab تنسيق Google Gemini API الأصلي لنماذج Gemini. يتيح ذلك التوافق المباشر مع Google AI SDKs.

## معلمات المسار

<ParamField path="model" type="string" required>
  اسم النموذج (على سبيل المثال، `gemini-2.5-pro`، `gemini-3.5-flash`).

  للتكاملات الإنتاجية، فضّل أجزاء الوسائط المعتمدة على URL من `fileData` / `file_data` مع عنوان URL عام يبدأ بـ `https`.
  سيوجه TokenLab القنوات الأصلية المدعومة من Gemini عبر المسار الأصلي عندما يكون ذلك ممكنًا، وسيتراجع تلقائيًا إلى مسار التحويل الداخلي المتوافق عندما لا يتوفر مسار جاهز أصليًا لذلك الطلب متعدد الوسائط.
</ParamField>

## معلمات الاستعلام

<ParamField query="key" type="string">
  مفتاح API (بديل للمصادقة عبر الترويسة).
</ParamField>

## المصادقة

تدعم نقاط نهاية Gemini طرق مصادقة متعددة:

* `?key=YOUR_API_KEY` معلمة استعلام
* `x-goog-api-key: YOUR_API_KEY` ترويسة
* `Authorization: Bearer YOUR_API_KEY` ترويسة

## جسم الطلب

<ParamField body="contents" type="array" required>
  محتويات المحادثة.

  يحتوي كل كائن محتوى على:

  * `role` (string): `user` أو `model`
  * `parts` (array): أجزاء المحتوى. يدعم TokenLab حالياً:
    * أجزاء نصية: `{ "text": "..." }`
    * أجزاء وسائط مضمّنة: `inlineData` / `inline_data`
    * أجزاء ملفات معتمدة على URL: `fileData` / `file_data`

  بالنسبة إلى أجزاء الوسائط، يقبل TokenLab حالياً أنواع MIME الخاصة بالصور والصوت والفيديو ويمررها عبر تفاصيل النموذج المتوافق مع Gemini.

  تتم مطابقة قيم الدور `user` و`model` بدون حساسية لحالة الأحرف. يتم قبول `inlineData` / `inline_data` مع `application/octet-stream` فقط عندما يستطيع TokenLab التعرف على بايتات صورة أو فيديو مدعومة؛ وإلا يفشل الطلب قبل التوجيه. في طلبات إخراج الصور الأصلية، تُقبل فقط عائلة أدوات Google search/maps، وتفشل تركيبات الأدوات غير المدعومة قبل إعادة المحاولة مع المزود.
</ParamField>

<ParamField body="systemInstruction" type="object">
  تعليمات النظام للنموذج.
</ParamField>

<ParamField body="generationConfig" type="object">
  تكوين الإنشاء:

  * `temperature` (number): درجة حرارة أخذ العينات
  * `topP` (number): احتمالية أخذ عينات النواة (Nucleus sampling)
  * `topK` (integer): أخذ عينات Top-K
  * `maxOutputTokens` (integer): الحد الأقصى لـ tokens المخرجات
  * `stopSequences` (array): تسلسلات التوقف
  * `candidateCount` (integer): عدد المرشحين للإنشاء غير المتدفق. يجب حذفها في طلبات البث أو إبقاؤها عند `1`.
  * `responseModalities` (array): أنماط الإخراج المطلوبة للمسارات الأصلية المتوافقة.
  * `responseMimeType` (string): نوع MIME للإخراج، مثل `text/plain` أو `application/json`.
  * `responseSchema` (object): JSON schema للإخراج المنظم عندما يطلب `responseMimeType` JSON.
  * `thinkingConfig` / `thinking_config` (object): خيارات ميزانية التفكير للنماذج المتوافقة.
</ParamField>

<ParamField body="safetySettings" type="array">
  إعدادات فلاتر الأمان.
</ParamField>

## الاستجابة

<ResponseField name="candidates" type="array">
  مرشحو المحتوى الذي تم إنشاؤه.
</ResponseField>

<ResponseField name="usageMetadata" type="object">
  معلومات استخدام الـ token.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "https://api.tokenlab.sh/v1beta/models/gemini-2.5-pro:generateContent?key=sk-your-api-key" \
    -H "Content-Type: application/json" \
    -d '{
      "contents": [
        {
          "parts": [{"text": "Hello, Gemini!"}]
        }
      ],
      "generationConfig": {
        "temperature": 0.7,
        "maxOutputTokens": 1024
      }
    }'
  ```

  ```python Python theme={null}
  import google.generativeai as genai

  genai.configure(
      api_key="sk-your-api-key",
      transport="rest",
      client_options={"api_endpoint": "api.tokenlab.sh"}
  )

  model = genai.GenerativeModel("gemini-2.5-pro")
  response = model.generate_content("Hello, Gemini!")

  print(response.text)
  ```

  ```javascript JavaScript theme={null}
  import { GoogleGenerativeAI } from "@google/generative-ai";

  const genAI = new GoogleGenerativeAI("sk-your-api-key", {
    baseUrl: "https://api.tokenlab.sh"
  });

  const model = genAI.getGenerativeModel({ model: "gemini-2.5-pro" });
  const result = await model.generateContent("Hello, Gemini!");

  console.log(result.response.text());
  ```

  ```go Go theme={null}
  package main

  import (
      "bytes"
      "encoding/json"
      "fmt"
      "io"
      "net/http"
  )

  func main() {
      payload := map[string]interface{}{
          "contents": []map[string]interface{}{
              {
                  "parts": []map[string]string{
                      {"text": "Hello, Gemini!"},
                  },
              },
          },
          "generationConfig": map[string]interface{}{
              "temperature":    0.7,
              "maxOutputTokens": 1024,
          },
      }

      jsonData, _ := json.Marshal(payload)
      req, _ := http.NewRequest("POST",
          "https://api.tokenlab.sh/v1beta/models/gemini-2.5-pro:generateContent?key=sk-your-api-key",
          bytes.NewBuffer(jsonData))
      req.Header.Set("Content-Type", "application/json")

      client := &http.Client{}
      resp, _ := client.Do(req)
      defer resp.Body.Close()

      body, _ := io.ReadAll(resp.Body)
      fmt.Println(string(body))
  }
  ```

  ```php PHP theme={null}
  <?php
  $payload = [
      'contents' => [
          [
              'parts' => [
                  ['text' => 'Hello, Gemini!']
              ]
          ]
      ],
      'generationConfig' => [
          'temperature' => 0.7,
          'maxOutputTokens' => 1024
      ]
  ];

  $ch = curl_init('https://api.tokenlab.sh/v1beta/models/gemini-2.5-pro:generateContent?key=sk-your-api-key');

  curl_setopt_array($ch, [
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_POST => true,
      CURLOPT_HTTPHEADER => [
          'Content-Type: application/json'
      ],
      CURLOPT_POSTFIELDS => json_encode($payload)
  ]);

  $response = curl_exec($ch);
  curl_close($ch);

  $data = json_decode($response, true);
  echo $data['candidates'][0]['content']['parts'][0]['text'];
  ```
</RequestExample>

## أمثلة الإدخال متعدد الوسائط

في طلبات Gemini متعددة الوسائط، ضع الوسائط داخل `contents[].parts[]` باستخدام بايتات مضمّنة أو مراجع ملفات عبر URL.

فئات الوسائط المدعومة حالياً في تفاصيل النموذج لـ Gemini:

* صورة
* صوت
* فيديو

بالنسبة إلى الوسائط المضمّنة، استخدم `inlineData` أو `inline_data` ومرّر بايتات الملف بترميز Base64.

بالنسبة إلى الوسائط عبر URL، استخدم `fileData` أو `file_data` ومرّر عنوان `https` عاماً يمكن الوصول إليه.

### مثال إدخال صورة

```json theme={null}
{
  "contents": [
    {
      "role": "user",
      "parts": [
        { "text": "يرجى وصف هذه الصورة." },
        {
          "inlineData": {
            "mimeType": "image/jpeg",
            "data": "/9j/4AAQSkZJRgABAQ..."
          }
        }
      ]
    }
  ]
}
```

### مثال إدخال صوت

```json theme={null}
{
  "contents": [
    {
      "role": "user",
      "parts": [
        { "text": "يرجى تفريغ هذا الصوت وتلخيصه." },
        {
          "file_data": {
            "mime_type": "audio/mpeg",
            "file_uri": "https://example.com/sample.mp3"
          }
        }
      ]
    }
  ]
}
```

### مثال إدخال فيديو

```json theme={null}
{
  "contents": [
    {
      "role": "user",
      "parts": [
        { "text": "يرجى وصف هذا الفيديو بإيجاز." },
        {
          "fileData": {
            "mimeType": "video/mp4",
            "fileUri": "https://example.com/sample.mp4"
          }
        }
      ]
    }
  ]
}
```

<ResponseExample>
  ```json Response theme={null}
  {
    "candidates": [
      {
        "content": {
          "role": "model",
          "parts": [
            {"text": "Hello! How can I assist you today?"}
          ]
        },
        "finishReason": "STOP",
        "safetyRatings": [
          {"category": "HARM_CATEGORY_HARASSMENT", "probability": "NEGLIGIBLE"}
        ]
      }
    ],
    "usageMetadata": {
      "promptTokenCount": 5,
      "candidatesTokenCount": 10,
      "totalTokenCount": 15
    }
  }
  ```
</ResponseExample>

## مثال إدخال الفيديو

```json theme={null}
{
  "contents": [
    {
      "role": "user",
      "parts": [
        { "text": "Please describe this video." },
        {
          "fileData": {
            "mimeType": "video/mp4",
            "fileUri": "https://example.com/demo.mp4"
          }
        }
      ]
    }
  ]
}
```

## مثال إدخال الصوت

```json theme={null}
{
  "contents": [
    {
      "role": "user",
      "parts": [
        { "text": "Please describe this audio." },
        {
          "fileData": {
            "mimeType": "audio/mpeg",
            "fileUri": "https://example.com/demo.mp3"
          }
        }
      ]
    }
  ]
}
```
