modellar

OpenAI: Text Embedding 3 Small

Markdown · JSON

OpenAI: Text Embedding 3 Small

OpenAI’ning uchinchi avloddagi kichik matn embedding modeli odatda 1 536 o‘lchamli vektorlar qaytaradi va qisqaroq ifodalarni qo‘llab-quvvatlaydi. Sonli natijadan semantik qidiruv, kodni qidirib topish, guruhlash, tavsiyalar va tasniflash uchun foydalaning.

Model haqida

Bu tavsif model imkoniyatlarini yoritadi. Ailoot da tanlangan usul uchun mavjud kirish, chiqish va parametrlar quyida keltirilgan.

text-embedding-3-small — OpenAI’ning uchinchi avloddagi kichikroq matn embedding modeli. U yozma materialni odatda 1 536 komponentli sonli vektorlarga aylantiradi. Bu vektorlar keyingi qidiruv yoki tahlil bosqichi uchun matnlar o‘rtasidagi munosabatlarni o‘lchaydi; model kirish matniga suhbat shaklidagi javob yaratmaydi.

Uchinchi avloddagi kattaroq model kabi, u ham qisqaroq embeddinglar uchun ishlab chiqaruvchining dimensions boshqaruv vositasini qo‘llab-quvvatlaydi. O‘qitish qisqartirilgan vektorda tushunchalarni ifodalovchi ma’lumotni saqlashga mo‘ljallangan, o‘lcham tanlovi esa ilovaning sifat va resurs talablariga ta’sir qiladi. Taqqoslanayotgan yozuvlar va so‘rovlarda model hamda tanlangan o‘lchamlar sonini bir xil saqlang.

Amaliy qo‘llanishlardan biri kod qidiruvidir. Ishlab chiqaruvchi qo‘llanmasida manba kodidagi funksiyalarni matn sifatida ifodalash va embedding qilish, so‘ng tabiiy tildagi so‘rovni o‘sha model bilan embedding qilib, hosil bo‘lgan vektorlarni taqqoslash tavsiflangan. Namunaviy natija — manba joylashuvlariga bog‘langan, tegishliligi bo‘yicha tartiblangan funksiyalar to‘plamidir. Hujjat qidiruvida bunga mos natija — matni va asl havolalari o‘quvchi yoki keyingi model uchun mavjud bo‘lib qoladigan parchalar to‘plamidir.

Hujjatlarda qayd etilgan boshqa qo‘llanishlar klasterlash, bog‘liq kontent tavsiyalari, tasniflash, boshqalardan ajralib turadigan yozuvlarni aniqlash va xilma-xillikni o‘lchashni o‘z ichiga oladi. Muayyan vazifaga yo‘naltirilgan xabarlar jarayoni o‘xshash so‘rovlarni guruhlashi yoki ularni toifalar tavsiflari bilan taqqoslashi mumkin. O‘xshashlik natijasi qanday qilib toifa, tavsiya yoki ko‘rib chiqiladigan elementga aylanishini ilova belgilaydi; embeddingning o‘zi sonli ma’lumot bo‘lib qoladi.

OpenAI har bir matn uchun maksimal kirish hajmini 8 192 token deb belgilaydi. Uning embedding API’si satrlar yoki tokenlashtirilgan kirishni va bitta so‘rovdagi bir nechta kirishni qabul qiladi, bo‘sh satrlarni rad etadi va jami 300 000 tokenlik limit qo‘llaydi. Uzun materialni mazmunli parchalar shaklida tayyorlang va ularni talqin qilish uchun kerak bo‘lgan sarlavha yoki ta’riflarni saqlang. Turli xil yozuvlarni o‘zaro aloqasiz tayyorlash qoidalari bilan embedding qilish o‘rniga, izchil manba maydonlari to‘plamidan foydalaning.

Ishlab chiqaruvchi odatda float vektorlar qaytaradi va base64 kodlashni ham hujjatlashtirgan. Qo‘llanma OpenAI embeddinglari birlik uzunligiga normallashtirilganini bildiradi va kosinus o‘xshashligini tavsiya qiladi; skalyar ko‘paytma uni hisoblashi mumkin, Evklid masofasi esa bir xil tartiblashni beradi. Agar uchinchi avlod embeddingi qaytarilgandan so‘ng qo‘lda qisqartirilsa, ushbu qisqartirilgan vektorni qo‘llanmada tasvirlanganidek qayta normallashtiring. dimensions boshqaruv vositasi qo‘lda kesishni odatiy tayyorlash bosqichiga aylantirishning oldini oladi.

Har bir vektor bilan birga model identifikatori, o‘lchamlar soni va manba havolasini qayd eting. Keyingi bosqich uchun foydali natija — ularni hosil qilgan matnga bog‘langan tartiblangan ro‘yxat, guruhlangan to‘plam yoki tasniflash belgilari to‘plamidir. Tanlangan material haqiqatan vazifani qo‘llab-quvvatlashini tekshiring va yetishmayotgan faktlarni semantik bog‘liqlikdan alohida tuting. Shunda keyingi bosqich bu ifodadan muayyan qidirib topish yoki qaror qabul qilish jarayoni uchun foydalanishi mumkin.

Ailoot Ultra · Embeddinglar POST /v1/embeddings openai/text-embedding-3-small

openai/text-embedding-3-small

OpenAI /openai/text-embedding-3-small
Model ID
  • openai/text-embedding-3-small
  • text-embedding-3-small

Boshlash

OpenAI’ning uchinchi avloddagi kichik matn embedding modeli odatda 1 536 o‘lchamli vektorlar qaytaradi va qisqaroq ifodalarni qo‘llab-quvvatlaydi. Sonli natijadan semantik qidiruv, kodni qidirib topish, guruhlash, tavsiyalar va tasniflash uchun foydalaning.

Qabul qilinadigan kirish ma’lumotlari
Matn · token_ids
Natijalar
embedding

Ailoot da mavjud · kirish ma’lumotlari va usullar

Ailoot Ultra · Embeddinglar POST /v1/embeddings
Kirish
text, token_ids
Chiqish
embedding
Kontekst
8 192 tokens
Chiqish formati
json
MaydonTurTalabQiymatlar va cheklovlarStandart
MaydonmodelTurstringTalabMajburiyQiymatlar va cheklovlar
openai/text-embedding-3-small
Standart—
MaydoninputTurstring|string[]|integer[]|integer[][]TalabMajburiyQiymatlar va cheklovlar
Elementlarning eng kam soni: 1
Shartlar: Bo‘sh bo‘lmagan, bir xil turdagi elementlardan iborat paket. Token ID lari manfiy bo‘lmagan butun sonlardir.
Kirish budjeti: Eng ko‘p: 8 192 · Matn birligi: UTF8 baytlari · Token birligi: Tokenlar massivi elementlari
Standart—
Maydonencoding_formatTurstringTalabIxtiyoriyQiymatlar va cheklovlar
float
Standartfloat
MaydondimensionsTurintegerTalabQo‘llab-quvvatlanmaydiQiymatlar va cheklovlar
Eng kam: 1
Standart—
MaydonuserTurjson_valueTalabIxtiyoriyQiymatlar va cheklovlar
Shartlar: Manba ushbu JSON metama’lumot maydoniga ruxsat beradi; uning ta’minotchi xizmatidagi aniq ma’nosi modelga bog‘liq.
Standart—
Maydonsession_idTurjson_valueTalabIxtiyoriyQiymatlar va cheklovlar
Shartlar: Manba ushbu JSON metama’lumot maydoniga ruxsat beradi; uning ta’minotchi xizmatidagi aniq ma’nosi modelga bog‘liq.
Standart—
MaydontraceTurjson_valueTalabIxtiyoriyQiymatlar va cheklovlar
Shartlar: Manba ushbu JSON metama’lumot maydoniga ruxsat beradi; uning ta’minotchi xizmatidagi aniq ma’nosi modelga bog‘liq.
Standart—
MaydonproviderTurobjectTalabIxtiyoriyQiymatlar va cheklovlar
Shartlar: provider.options rad etildi
Standart—
Kirish materiallari birikmalari

text_to_embedding

Usul parametrlari va hayot sikli
ParametrParametr talablari
Parametrcontent_typeParametr talablariapplication/json
ParametrrequiredParametr talablarimodel, input
Parametrinput_shapesParametr talablaristring, string[], nonnegative_integer_token_array, nonnegative_integer_token_array[]
Parametrencoding_formatParametr talablarifloat
Parametrdimensions_overrideParametr talablarifalse
Parametrmax_input_budget_unitsParametr talablari8192
Parametrmultimodal_objectsParametr talablarifalse
Parametrmaterial_typesParametr talablaritext, token_ids

Hayot sikli: synchronous_json

Har bir vektorning indeksi va o‘lchamini saqlang.

Model nomida multimodal deyilgani aynan shu yo‘nalishda rasm obyektlariga ruxsat borligini anglatmaydi.

Tariflar

Tarif ma’lumotlari so‘rov imkoniyatlarini qo‘shmaydi. Qo‘llab-quvvatlanadigan parametrlar tanlangan usulda ko‘rsatilgan.

Tezkor rejim
Standart tarif Tezkor rejim tanlanganda
Flex rejimi
Standart tarif flex rejimi tanlanganda
Maksimal fikrlash darajasi
Standart tarif Maksimal fikrlash darajasi uchun standart (default) tuzatish qo‘llanganda

Ailoot tariflari

Sozlamalar bo‘yicha narxlar

SozlamaTariflar jadvaliTo‘lov
SozlamaTokenlar uchun bazaviy tariflarTariflar jadvaliAsosiy tarifTo‘lov
Kirish · Kirish tokenlari $0.00004 / 1K token
Chiqish · Chiqish tokenlari $0 / 1K token
Kirish · Keshdan o‘qish — / 1K token
Kirish · Keshga yozish — / 1K token
Kirish · Keshga yozish, 1 soat — / 1K token

Ailoot so‘rovdan oldin taxminiy summani band qiladi. Natijadan keyin o‘lchangan sarf asosidagi yakuniy to‘lovni yechadi. Oqimli javob bo‘yicha yakuniy hisob-kitob yakuniy sarf yozuviga asoslanadi. Summani band qilish va to‘lovni hisoblash tartibi →

So‘rov namunalari

Ailoot Ultra · Embeddinglar

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-small", "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-small',input=["First document","Second document"])
print(result)
for item in result.data:print(item.index,item.embedding)

Natijalarni olish va saqlash

Ailoot Ultra · Embeddinglar

json

Barcha tayyor natijalarni saqlash

Qaytarilgan har bir to‘liq javob, fayl va kontent qismini saqlang.

Har bir vektorni indeksi bilan saqlang. Vektorlar soni kirish elementlari soniga teng bo‘lishi va o‘lchamlar bir xil bo‘lishi kerak.

Asl javobni tekshirish kerak bo‘lsa

Embedding vazifalari uchun endpoint qo‘shilmaydi.

Javob maydonlari
MaydonTur
MaydonobjectTurstring
MaydonmodelTurstring
Maydondata[].indexTurinteger
Maydondata[].embeddingTurfinite float[]
MaydonusageTurobject
Xatolar va keyingi qadamlar
JavobShartKeyingi qadam
Javob400 · invalid_request_errorShartMajburiy maydonlar, material ifodasi yoki parametr qiymati noto‘g‘riKeyingi qadamYangi yaratish so‘rovidan oldin ko‘rsatilgan maydonlarni tuzating.

Taxalluslar

Model taxalluslari

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

Usul yo‘llari taxalluslari

Yuqorida ko‘rsatilgan usul yo‘llaridan foydalaning.

Chaqirish uchun tegishli ID lar

openai/text-embedding-3-small, text-embedding-3-small

Ailoot Ultra · Embeddinglar · text-embedding-3-small POST /v1/embeddings text-embedding-3-small

text-embedding-3-small

OpenAI /text-embedding-3-small
Model ID
  • openai/text-embedding-3-small
  • text-embedding-3-small

Boshlash

OpenAI’ning uchinchi avloddagi kichik matn embedding modeli odatda 1 536 o‘lchamli vektorlar qaytaradi va qisqaroq ifodalarni qo‘llab-quvvatlaydi. Sonli natijadan semantik qidiruv, kodni qidirib topish, guruhlash, tavsiyalar va tasniflash uchun foydalaning.

Qabul qilinadigan kirish ma’lumotlari
Matn
Natijalar
embedding

Ailoot da mavjud · kirish ma’lumotlari va usullar

Ailoot Ultra · Embeddinglar · text-embedding-3-small POST /v1/embeddings
Kirish
text
Chiqish
embedding
Kontekst
8 192 tokens
Chiqish formati
json
MaydonTurTalabQiymatlar va cheklovlarStandart
MaydonmodelTurstringTalabMajburiyQiymatlar va cheklovlar
text-embedding-3-small
Standart—
MaydoninputTurstring|string[]|integer[]|integer[][]TalabMajburiyQiymatlar va cheklovlar
Elementlarning eng kam soni: 1
Shartlar: Bo‘sh bo‘lmagan, bir xil turdagi elementlardan iborat paket. Token ID lari manfiy bo‘lmagan butun sonlardir.
Kirish budjeti: Eng ko‘p: 8 192 · Matn birligi: UTF8 baytlari · Token birligi: Tokenlar massivi elementlari
Standart—
Maydonencoding_formatTurstringTalabIxtiyoriyQiymatlar va cheklovlar
float
Standartfloat
MaydondimensionsTurintegerTalabQo‘llab-quvvatlanmaydiQiymatlar va cheklovlar
Eng kam: 1
Standart—
MaydonuserTurjson_valueTalabIxtiyoriyQiymatlar va cheklovlar
Shartlar: Ixtiyoriy JSON metama’lumotlari; dastlabki tizimdagi aniq semantika tanlangan modelga bog‘liq.
Standart—
Maydonsession_idTurjson_valueTalabIxtiyoriyQiymatlar va cheklovlar
Shartlar: Ixtiyoriy JSON metama’lumotlari; dastlabki tizimdagi aniq semantika tanlangan modelga bog‘liq.
Standart—
MaydontraceTurjson_valueTalabIxtiyoriyQiymatlar va cheklovlar
Shartlar: Ixtiyoriy JSON metama’lumotlari; dastlabki tizimdagi aniq semantika tanlangan modelga bog‘liq.
Standart—
MaydonproviderTurobjectTalabIxtiyoriyQiymatlar va cheklovlar
Shartlar: provider.options rad etildi
Standart—
Kirish materiallari birikmalari

text_to_embedding

Usul parametrlari va hayot sikli
ParametrParametr talablari
Parametrcontent_typeParametr talablariapplication/json
ParametrrequiredParametr talablarimodel, input
Parametrinput_shapesParametr talablaristring, string[], nonnegative_integer_token_array, nonnegative_integer_token_array[]
Parametrencoding_formatParametr talablarifloat
Parametrdimensions_overrideParametr talablarifalse
Parametrmax_input_budget_unitsParametr talablari8192
Parametrmultimodal_objectsParametr talablarifalse
Parametrmaterial_typesParametr talablaritext
Parametrtext_file_materialParametr talablariHaqiqiy UTF-8 hujjatini o‘qing va uning matnini ko‘rsatilgan kirish yoki xabar kontenti satriga joylashtiring.

Hayot sikli: synchronous_json

Aniq model ID sini va majburiy maydonlarni yuboring.

Qaytarilgan har bir element va uning dastlabki identifikatorlarini saqlang.

Tariflar

Tarif ma’lumotlari so‘rov imkoniyatlarini qo‘shmaydi. Qo‘llab-quvvatlanadigan parametrlar tanlangan usulda ko‘rsatilgan.

Tezkor rejim
Standart tarif Tezkor rejim tanlanganda
Flex rejimi
Standart tarif flex rejimi tanlanganda
Maksimal fikrlash darajasi
Standart tarif Maksimal fikrlash darajasi uchun standart (default) tuzatish qo‘llanganda

Ailoot tariflari

Sozlamalar bo‘yicha narxlar

SozlamaTariflar jadvaliTo‘lov
SozlamaTokenlar uchun bazaviy tariflarTariflar jadvaliAsosiy tarifTo‘lov
Kirish · Kirish tokenlari $0.00004 / 1K token
Chiqish · Chiqish tokenlari $0 / 1K token
Kirish · Keshdan o‘qish — / 1K token
Kirish · Keshga yozish — / 1K token
Kirish · Keshga yozish, 1 soat — / 1K token

Ailoot so‘rovdan oldin taxminiy summani band qiladi. Natijadan keyin o‘lchangan sarf asosidagi yakuniy to‘lovni yechadi. Oqimli javob bo‘yicha yakuniy hisob-kitob yakuniy sarf yozuviga asoslanadi. Summani band qilish va to‘lovni hisoblash tartibi →

So‘rov namunalari

Ailoot Ultra · Embeddinglar · text-embedding-3-small

To‘liq minimal JSON so‘rov tanasicurl · O‘zingizning UTF-8 hujjatingizdan foydalaningPython · Natijani to‘liq saqlang
{
  "model": "text-embedding-3-small",
  "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-small', '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-small', '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')))

Natijalarni olish va saqlash

Ailoot Ultra · Embeddinglar · text-embedding-3-small

json

Barcha tayyor natijalarni saqlash

Qaytarilgan har bir to‘liq javob, fayl va kontent qismini saqlang.

Har bir chekli vektorni dastlabki indeksi bilan saqlang. Barcha o‘lchamlarni va to‘liq usage obyektini saqlang.

Asl javobni tekshirish kerak bo‘lsa

Embedding vazifalari uchun endpoint qo‘shilmaydi.

Javob maydonlari
MaydonTur
MaydonobjectTurstring
MaydonmodelTurstring
Maydondata[].indexTurinteger
Maydondata[].embeddingTurfinite float[]
MaydonusageTurobject
Xatolar va keyingi qadamlar
JavobShartKeyingi qadam
Javob400 · invalid_request_errorShartMajburiy maydonlar, material ifodasi yoki parametr qiymati noto‘g‘riKeyingi qadamYangi yaratish so‘rovidan oldin ko‘rsatilgan maydonlarni tuzating.

Taxalluslar

Model taxalluslari

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

Usul yo‘llari taxalluslari

Yuqorida ko‘rsatilgan usul yo‘llaridan foydalaning.

Chaqirish uchun tegishli ID lar

openai/text-embedding-3-small, text-embedding-3-small

FAQ · OpenAI: Text Embedding 3 Small
Qanday kirish ma’lumotlari va natijalar mavjud?

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

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

So‘rov qaysi maydonlardan foydalanadi?

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

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

Qanday cheklovlar amal qiladi?

POST /v1/embeddings · openai/text-embedding-3-small: ctx: 8192; input.budget.maximum: 8192 (UTF8 baytlari); input.min_items: 1

POST /v1/embeddings · text-embedding-3-small: ctx: 8192; input.budget.maximum: 8192 (UTF8 baytlari); input.min_items: 1

Batafsil

Ailoot’ni Claude Code, OpenCode, Hermes yoki ilovangizga ulang.

Kompaniya va uning loyihalar portfeli

Kompaniya va uning loyihalar portfeli: millionlab mijozlar; oylik sotuvlar hajmi milliardlarda.

Tokenlarni chegirma bilan xarid qiling.

Muntazam ish uchun obuna chegirmasi. Token xaridiga promokodlar — 50% gacha.

Obuna
Muntazam so‘rovlaringiz uchun chegirmali tarif tanlang.
50% gacha promokod
Xaridda kod kiriting. Narx amaldagi aksiya bilan qayta hisoblanadi.
Tarixdagi xarajatlar
Har so‘rov uchun model, token va summa saqlanadi.

Obuna tanlash · Model narxlarini ko‘rish

API’ni sotadigan mahsulotingizga ulang.

SaaS, ilova va botlar Ailoot ofertasi hamda litsenziya shartnomasiga muvofiq. Qayta sotishga reseller litsenziyasi so‘rang.

Tijorat ilovasi
Xizmatingizning pullik funksiyalariga matn, rasm, video va ovoz yaratishni qo‘shing.
Reseller litsenziyasi
Loyiha tavsifi va kirish sxemasini yuboring. Foydalanish va qayta sotishga yozma shartlarni so‘rang.
Saytdagi hujjatlar
Oferta, litsenziya shartnomasi va ma’lumotlar siyosati ulashdan oldin ochiq.

Reseller litsenziyasini so‘rash · Oferta va litsenziya shartnomasi