النماذج

OpenAI: Text Embedding 3 Large

Markdown · JSON

OpenAI: Text Embedding 3 Large

يعيد نموذج تضمين النصوص الأكبر من الجيل الثالث لدى OpenAI متجهات من 3,072 بُعدًا افتراضيًا، مع أداة تحكم لدى المُنتج لتمثيلات أقصر. استخدمه للاسترجاع الدلالي والمقارنة المتعددة اللغات وسير عمل المحتوى المرتبط أو التصنيف.

عن النموذج

يغطي هذا الوصف قدرات النموذج. وترد أدناه المدخلات والمخرجات والخيارات المتاحة في Ailoot للطريقة المحددة.

text-embedding-3-large هو نموذج تضمين النصوص الأكبر من الجيل الثالث لدى OpenAI للمهام الإنجليزية وغير الإنجليزية. ويمثّل المادة المكتوبة بمتجه رقمي، ويعيد 3,072 مكوّنًا افتراضيًا. ويمثّل المتجه العلاقات في المحتوى المقدَّم؛ وتستخدمه عملية استرجاع أو تصنيف لاختيار المواد أو اتخاذ قرار آخر.

تُدرَّب نماذج الجيل الثالث لدعم تمثيلات أقصر من خلال أداة التحكم dimensions لدى المُنتج. وتعطي الشركة المصنّعة 1,024 بُعدًا مثالًا عندما يتطلب مخزن المتجهات ذلك الحجم. ويقلّل المتجه الأقصر كمية البيانات المطلوب تخزينها ومقارنتها، بينما قد يؤثر تغيير التمثيل في جودة الاسترجاع. اختر الحجم وفق متطلبات التطبيق، واستخدم الاختيار نفسه للمجموعة واستعلاماتها.

يقسّم سير عمل توضيحي للبحث في المستندات المادة المصدرية إلى مقاطع ذات معنى، ويحفظ معرّفاتها، ويحصل على متجهات لكل مقطع. ويُنشأ تضمين لسؤال باستخدام النموذج والأبعاد نفسيهما، ثم يُقارَن بمتجهات المقاطع. ويوفّر التطبيق المرشّحات ويختار النتائج المرتّبة ويعرض مراجع مصادرها. ويمكن لنموذج لاحق لتوليد النص تطوير إجابة من المادة المسترجعة؛ وتظل نتيجة نموذج التضمين بيانات رقمية.

تشمل التطبيقات الموثّقة الأخرى البحث في الشيفرة أو النصوص، وتجميع السجلات المتشابهة، والتوصية بمحتوى مرتبط، والتصنيف، واكتشاف الشذوذ، وقياس التنوع في المجموعة. وللتوصية، صِف العناصر بالمصطلحات ذات الصلة بالعلاقة. وفي التصنيف، قارن بتمثيلات الفئات أو استخدم المتجهات سماتٍ في مُصنِّف. حدّد القاعدة التي تحوّل التشابه إلى النتيجة التي يحتاجها المنتج.

تذكر OpenAI حد مدخلات أقصى من 8,192 رمزًا لكل نص. وتقبل واجهة التضمين سلاسل نصية أو نصًا مجزّأً إلى رموز، وتدعم مدخلات متعددة، وترفض السلاسل الفارغة. وتفرض أيضًا حدًا إجماليًا من 300,000 رمز للطلب الواحد. وينبغي تقسيم المستند الطويل مع الحفاظ على حدوده ذات المعنى وسياقه، وإبقاء كل متجه مرتبطًا بمقطعه المصدري.

يوثّق المُنتج متجهات float بوصفها المخرج الافتراضي، وbase64 بوصفه ترميزًا بديلًا. ويوصي الدليل بتشابه جيب التمام، ويذكر أن تضمينات OpenAI مطبَّعة إلى طول معياري واحد، ما يتيح استخدام الضرب النقطي لتشابه جيب التمام والحصول على ترتيب مكافئ باستخدام المسافة الإقليدية. وإذا اختُصر متجه من الجيل الثالث يدويًا بعد توليده، فتوجّه الشركة المصنّعة التطبيق إلى إعادة تطبيع المتجه المختصر؛ ويُعد استخدام أداة التحكم dimensions المسار الموصى به.

جهّز تمثيلًا نصيًا متسقًا، وسجّل النموذج والأبعاد ومعرّف المصدر. ويتمثّل ناتج نهائي مفيد في مجموعة مرتّبة من المقاطع أو العناصر المرتبطة أو السجلات المجمَّعة، مع قاعدة اختيار صريحة. قيّم ما إذا كانت النتيجة تعالج الاستعلام، واحتفظ بالأدلة المصدرية للمرحلة التالية، بدلًا من اعتبار تشابه المتجهات تحققًا من الادعاءات الواقعية لسجل.

Ailoot Ultra · التضمينات POST /v1/embeddings openai/text-embedding-3-large

openai/text-embedding-3-large

OpenAI /openai/text-embedding-3-large
معرّف النموذج ID
  • openai/text-embedding-3-large
  • text-embedding-3-large

البداية

يعيد نموذج تضمين النصوص الأكبر من الجيل الثالث لدى OpenAI متجهات من 3,072 بُعدًا افتراضيًا، مع أداة تحكم لدى المُنتج لتمثيلات أقصر. استخدمه للاسترجاع الدلالي والمقارنة المتعددة اللغات وسير عمل المحتوى المرتبط أو التصنيف.

المدخلات المقبولة
النص · token_ids
النتائج
embedding

متاح في Ailoot · المدخلات والطرائق

Ailoot Ultra · التضمينات POST /v1/embeddings
الإدخال
text, token_ids
الإخراج
embedding
السياق
⁦8,192⁩ tokens
صيغة الإخراج
json
الحقلالنوعالمتطلبالقيم والحدودالقيمة الافتراضية
الحقلmodelالنوعstringالمتطلبمطلوبالقيم والحدود
openai/text-embedding-3-large
القيمة الافتراضية—
الحقلinputالنوعstring|string[]|integer[]|integer[][]المتطلبمطلوبالقيم والحدود
الحد الأدنى للعناصر: ⁦1⁩
الشروط: دفعة متجانسة غير فارغة. معرّفات التوكنات أعداد صحيحة غير سالبة.
سعة الإدخال: الحد الأقصى: ⁦8,192⁩ · وحدة النص: بايتات UTF8 · وحدة الرموز: عناصر مصفوفة الرموز
القيمة الافتراضية—
الحقلencoding_formatالنوعstringالمتطلباختياريالقيم والحدود
float
القيمة الافتراضيةfloat
الحقلdimensionsالنوعintegerالمتطلبغير مدعومالقيم والحدود
الحد الأدنى: ⁦1⁩
القيمة الافتراضية—
الحقلuserالنوعjson_valueالمتطلباختياريالقيم والحدود
الشروط: يسمح المصدر بحقل البيانات الوصفية هذا بصيغة JSON؛ ويعتمد المعنى الدقيق لدى المزوّد الأصلي على النموذج.
القيمة الافتراضية—
الحقلsession_idالنوعjson_valueالمتطلباختياريالقيم والحدود
الشروط: يسمح المصدر بحقل البيانات الوصفية هذا بصيغة JSON؛ ويعتمد المعنى الدقيق لدى المزوّد الأصلي على النموذج.
القيمة الافتراضية—
الحقلtraceالنوعjson_valueالمتطلباختياريالقيم والحدود
الشروط: يسمح المصدر بحقل البيانات الوصفية هذا بصيغة JSON؛ ويعتمد المعنى الدقيق لدى المزوّد الأصلي على النموذج.
القيمة الافتراضية—
الحقلproviderالنوعobjectالمتطلباختياريالقيم والحدود
الشروط: تم رفض provider.options
القيمة الافتراضية—
تركيبات مواد الإدخال

text_to_embedding

معلمات الطريقة ودورة حياتها
المعلمةالمواصفات
المعلمةcontent_typeالمواصفاتapplication/json
المعلمةrequiredالمواصفاتmodel, input
المعلمةinput_shapesالمواصفاتstring, string[], nonnegative_integer_token_array, nonnegative_integer_token_array[]
المعلمةencoding_formatالمواصفاتfloat
المعلمةdimensions_overrideالمواصفاتfalse
المعلمةmax_input_budget_unitsالمواصفات8192
المعلمةmultimodal_objectsالمواصفاتfalse
المعلمةmaterial_typesالمواصفاتtext, token_ids

دورة الحياة: synchronous_json

احتفظ بفهرس كل متجه وبُعده.

اسم النموذج متعدد الوسائط لا يتيح استخدام كائنات الصور على هذا المسار المحدد.

الباقات

مراجع التسعير لا تضيف خيارات للطلب. المعلمات المدعومة مذكورة للطريقة المحددة.

الوضع السريع
التعرفة القياسية عند اختيار الوضع السريع
الوضع المرن
التعرفة القياسية عند اختيار وضع flex
أقصى جهد للاستدلال
التعرفة القياسية عندما يُطبَّق الضبط الافتراضي default مع أقصى جهد للاستدلال

تعرفات Ailoot

الأسعار حسب الإعدادات

الإعداداتجدول التعرفةالرسوم
الإعداداتالتعرفات الأساسية للرموزجدول التعرفةالتعرفة الأساسيةالرسوم
الإدخال · رموز الإدخال $0.00026 / 1K من الرموز
الإخراج · رموز الإخراج $0 / 1K من الرموز
الإدخال · قراءة ذاكرة التخزين المؤقت — / 1K من الرموز
الإدخال · الكتابة إلى ذاكرة التخزين المؤقت — / 1K من الرموز
الإدخال · الكتابة إلى ذاكرة التخزين المؤقت، 1 ساعة — / 1K من الرموز

تحجز Ailoot مبلغًا تقديريًا قبل الطلب. وبعد ظهور النتيجة، تُسوّي الرسوم النهائية بناءً على الاستخدام المقاس. وتستخدم تسوية البث سجل الاستخدام النهائي. كيفية عمل حجز المبلغ وتسوية الرسوم →

أمثلة للطلبات

Ailoot Ultra · التضمينات

curlPython SDK
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "openai/text-embedding-3-large", "input": ["First document", "Second document"]}')

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/embeddings \
  -H "Authorization: Bearer $AILOOT_API_KEY" -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
r=json.loads(Path("result.json").read_text())
for x in r.get("data",[]): print(json.dumps({"index":x.get("index"),"embedding":x.get("embedding")}))
PY_RESULT
from openai import OpenAI
import os

client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.embeddings.create(model='openai/text-embedding-3-large',input=["First document","Second document"])
print(result)
for item in result.data:print(item.index,item.embedding)

استلام النتائج وحفظها

Ailoot Ultra · التضمينات

json

الاحتفاظ بكل النتائج المكتملة

احتفظ بكل استجابة كاملة وكل ملف وجزء محتوى تم إرجاعه.

احتفظ بكل متجه مع فهرسه. يجب أن يساوي عدد المتجهات عدد المدخلات، وأن تكون الأبعاد متسقة.

عند الحاجة إلى التحقق من الاستجابة الأصلية

لا تُستحدث نقطة نهاية لمهام التضمين.

حقول الاستجابة
الحقلالنوع
الحقلobjectالنوعstring
الحقلmodelالنوعstring
الحقلdata[].indexالنوعinteger
الحقلdata[].embeddingالنوعfinite float[]
الحقلusageالنوعobject
الأخطاء والخطوات التالية
الاستجابةالشرطالخطوة التالية
الاستجابة⁦400⁩ · invalid_request_errorالشرطحقول مطلوبة أو تمثيل مادة أو قيمة معلمة غير صحيحةالخطوة التاليةصحّح الحقول المحددة قبل طلب إنشاء جديد.

الأسماء البديلة

الأسماء البديلة للنموذج

Ailoot Ultra openai/text-embedding-3-large, text-embedding-3-large

الأسماء البديلة لمسارات الطرائق

استخدم مسارات الطرائق المعروضة أعلاه.

معرّفات النماذج ذات الصلة IDs

openai/text-embedding-3-large, text-embedding-3-large

Ailoot Ultra · تمثيلات متجهية · text-embedding-3-large POST /v1/embeddings text-embedding-3-large

text-embedding-3-large

OpenAI /text-embedding-3-large
معرّف النموذج ID
  • openai/text-embedding-3-large
  • text-embedding-3-large

البداية

يعيد نموذج تضمين النصوص الأكبر من الجيل الثالث لدى OpenAI متجهات من 3,072 بُعدًا افتراضيًا، مع أداة تحكم لدى المُنتج لتمثيلات أقصر. استخدمه للاسترجاع الدلالي والمقارنة المتعددة اللغات وسير عمل المحتوى المرتبط أو التصنيف.

المدخلات المقبولة
النص
النتائج
embedding

متاح في Ailoot · المدخلات والطرائق

Ailoot Ultra · تمثيلات متجهية · text-embedding-3-large POST /v1/embeddings
الإدخال
text
الإخراج
embedding
السياق
⁦8,192⁩ tokens
صيغة الإخراج
json
الحقلالنوعالمتطلبالقيم والحدودالقيمة الافتراضية
الحقلmodelالنوعstringالمتطلبمطلوبالقيم والحدود
text-embedding-3-large
القيمة الافتراضية—
الحقلinputالنوعstring|string[]|integer[]|integer[][]المتطلبمطلوبالقيم والحدود
الحد الأدنى للعناصر: ⁦1⁩
الشروط: دفعة متجانسة غير فارغة. معرّفات التوكنات أعداد صحيحة غير سالبة.
سعة الإدخال: الحد الأقصى: ⁦8,192⁩ · وحدة النص: بايتات UTF8 · وحدة الرموز: عناصر مصفوفة الرموز
القيمة الافتراضية—
الحقلencoding_formatالنوعstringالمتطلباختياريالقيم والحدود
float
القيمة الافتراضيةfloat
الحقلdimensionsالنوعintegerالمتطلبغير مدعومالقيم والحدود
الحد الأدنى: ⁦1⁩
القيمة الافتراضية—
الحقلuserالنوعjson_valueالمتطلباختياريالقيم والحدود
الشروط: بيانات وصفية اختيارية بصيغة JSON؛ وتعتمد الدلالات الدقيقة لدى المزوّد على النموذج المختار.
القيمة الافتراضية—
الحقلsession_idالنوعjson_valueالمتطلباختياريالقيم والحدود
الشروط: بيانات وصفية اختيارية بصيغة JSON؛ وتعتمد الدلالات الدقيقة لدى المزوّد على النموذج المختار.
القيمة الافتراضية—
الحقلtraceالنوعjson_valueالمتطلباختياريالقيم والحدود
الشروط: بيانات وصفية اختيارية بصيغة JSON؛ وتعتمد الدلالات الدقيقة لدى المزوّد على النموذج المختار.
القيمة الافتراضية—
الحقلproviderالنوعobjectالمتطلباختياريالقيم والحدود
الشروط: تم رفض provider.options
القيمة الافتراضية—
تركيبات مواد الإدخال

text_to_embedding

معلمات الطريقة ودورة حياتها
المعلمةالمواصفات
المعلمةcontent_typeالمواصفاتapplication/json
المعلمةrequiredالمواصفاتmodel, input
المعلمةinput_shapesالمواصفاتstring, string[], nonnegative_integer_token_array, nonnegative_integer_token_array[]
المعلمةencoding_formatالمواصفاتfloat
المعلمةdimensions_overrideالمواصفاتfalse
المعلمةmax_input_budget_unitsالمواصفات8192
المعلمةmultimodal_objectsالمواصفاتfalse
المعلمةmaterial_typesالمواصفاتtext
المعلمةtext_file_materialالمواصفاتاقرأ مستند UTF-8 الفعلي وضع نصه في الإدخال المحدد أو السلسلة النصية لمحتوى الرسالة.

دورة الحياة: synchronous_json

أرسل معرّف النموذج الدقيق والحقول المطلوبة.

احتفظ بكل عنصر مُعاد وبمعرّفاته الأصلية.

الباقات

مراجع التسعير لا تضيف خيارات للطلب. المعلمات المدعومة مذكورة للطريقة المحددة.

الوضع السريع
التعرفة القياسية عند اختيار الوضع السريع
الوضع المرن
التعرفة القياسية عند اختيار وضع flex
أقصى جهد للاستدلال
التعرفة القياسية عندما يُطبَّق الضبط الافتراضي default مع أقصى جهد للاستدلال

تعرفات Ailoot

الأسعار حسب الإعدادات

الإعداداتجدول التعرفةالرسوم
الإعداداتالتعرفات الأساسية للرموزجدول التعرفةالتعرفة الأساسيةالرسوم
الإدخال · رموز الإدخال $0.00026 / 1K من الرموز
الإخراج · رموز الإخراج $0 / 1K من الرموز
الإدخال · قراءة ذاكرة التخزين المؤقت — / 1K من الرموز
الإدخال · الكتابة إلى ذاكرة التخزين المؤقت — / 1K من الرموز
الإدخال · الكتابة إلى ذاكرة التخزين المؤقت، 1 ساعة — / 1K من الرموز

تحجز Ailoot مبلغًا تقديريًا قبل الطلب. وبعد ظهور النتيجة، تُسوّي الرسوم النهائية بناءً على الاستخدام المقاس. وتستخدم تسوية البث سجل الاستخدام النهائي. كيفية عمل حجز المبلغ وتسوية الرسوم →

أمثلة للطلبات

Ailoot Ultra · تمثيلات متجهية · text-embedding-3-large

جسم طلب JSON مكتمل بالحد الأدنىcurl · استخدم مستندك بترميز UTF-8Python · احفظ النتيجة كاملة
{
  "model": "text-embedding-3-large",
  "input": [
    "First document",
    "Second document"
  ],
  "encoding_format": "float"
}
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'text-embedding-3-large', 'input': ['First document', 'Second document'], 'encoding_format': 'float'}
payload['input'] = [text]
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/embeddings \
  -H "Authorization: Bearer $AILOOT_API_KEY" -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

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
for vector in result.get('data', []):
    print('Vector', vector.get('index'), json.dumps(vector.get('embedding')))
PY_RESULT
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'text-embedding-3-large', 'input': ['First document', 'Second document'], 'encoding_format': 'float'}
payload['input'] = [text]
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'Authorization': 'Bearer PLACEHOLDER_KEY', 'Content-Type': 'application/json'}
headers['Authorization'] = 'Bearer ' + api_key
request = Request('https://api.ailoot.ai/v1/embeddings', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
for vector in result.get('data', []):
    print('Vector', vector.get('index'), json.dumps(vector.get('embedding')))

استلام النتائج وحفظها

Ailoot Ultra · تمثيلات متجهية · text-embedding-3-large

json

الاحتفاظ بكل النتائج المكتملة

احتفظ بكل استجابة كاملة وكل ملف وجزء محتوى تم إرجاعه.

احتفظ بكل متجه ذي قيم منتهية مع فهرسه الأصلي. حافظ على جميع الأبعاد وكائن الاستخدام كاملاً.

عند الحاجة إلى التحقق من الاستجابة الأصلية

لا تُستحدث نقطة نهاية لمهام التضمين.

حقول الاستجابة
الحقلالنوع
الحقلobjectالنوعstring
الحقلmodelالنوعstring
الحقلdata[].indexالنوعinteger
الحقلdata[].embeddingالنوعfinite float[]
الحقلusageالنوعobject
الأخطاء والخطوات التالية
الاستجابةالشرطالخطوة التالية
الاستجابة⁦400⁩ · invalid_request_errorالشرطحقول مطلوبة أو تمثيل مادة أو قيمة معلمة غير صحيحةالخطوة التاليةصحّح الحقول المحددة قبل طلب إنشاء جديد.

الأسماء البديلة

الأسماء البديلة للنموذج

Ailoot Ultra openai/text-embedding-3-large, text-embedding-3-large

الأسماء البديلة لمسارات الطرائق

استخدم مسارات الطرائق المعروضة أعلاه.

معرّفات النماذج ذات الصلة IDs

openai/text-embedding-3-large, text-embedding-3-large

FAQ · OpenAI: Text Embedding 3 Large
ما المدخلات والنتائج المتاحة؟

POST /v1/embeddings · openai/text-embedding-3-large: text, token_ids → embedding

POST /v1/embeddings · text-embedding-3-large: text → embedding

ما الحقول التي يستخدمها الطلب؟

POST /v1/embeddings · openai/text-embedding-3-large: model, input, encoding_format, provider

POST /v1/embeddings · text-embedding-3-large: model, input, encoding_format, provider

ما الحدود المطبقة؟

POST /v1/embeddings · openai/text-embedding-3-large: ctx: 8192; input.budget.maximum: 8192 (بايتات UTF8); input.min_items: 1

POST /v1/embeddings · text-embedding-3-large: ctx: 8192; input.budget.maximum: 8192 (بايتات UTF8); input.min_items: 1

المزيد من التفاصيل

اربط Ailoot بخدمة Claude Code أوOpenCode أوHermes أوتطبيقك.

الشركة ومحفظة مشاريعها

الشركة ومحفظة مشاريعها: ملايين العملاء؛ مبيعات بالمليارات شهريًا.

اشتر الرموز بخصم.

خصم اشتراك للعمل المنتظم. الرموز الترويجية حتى 50% على شراء الرموز.

الاشتراك
اختر خطة بخصم لطلباتك المنتظمة.
رمز خصم حتى 50%
أدخل الرمز عند الشراء. يعاد حساب السعر وفق العرض الساري.
المصروفات في السجل
يحفظ النموذج والرموز والمبلغ لكل طلب.

اختر اشتراكا · اعرض أسعار النماذج

اربط API بالمنتج الذي تبيعه.

SaaS والتطبيقات والبوتات وفق العرض واتفاقية ترخيص Ailoot. لإعادة البيع، اطلب ترخيص موزع.

تطبيق تجاري
أضف توليد النص والصور والفيديو والصوت إلى ميزات خدمتك المدفوعة.
ترخيص إعادة البيع
أرسل وصف المشروع وطريقة توفير الوصول. اطلب شروط استخدام وإعادة بيع مكتوبة.
المستندات على الموقع
العرض واتفاقية الترخيص وسياسة معالجة البيانات متاحة قبل الربط.

اطلب ترخيص إعادة بيع · العرض واتفاقية الترخيص